1 /* 2 * Copyright 2021 HIMSA II K/S - www.himsa.com. 3 * Represented by EHIMA - www.ehima.com 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.android.bluetooth.vc; 19 20 import android.bluetooth.BluetoothDevice; 21 import android.bluetooth.BluetoothProfile; 22 23 public class VolumeControlStackEvent { 24 // Event types for STACK_EVENT message (coming from native) 25 private static final int EVENT_TYPE_NONE = 0; 26 public static final int EVENT_TYPE_CONNECTION_STATE_CHANGED = 1; 27 public static final int EVENT_TYPE_VOLUME_STATE_CHANGED = 2; 28 public static final int EVENT_TYPE_DEVICE_AVAILABLE = 3; 29 public static final int EVENT_TYPE_EXT_AUDIO_OUT_VOL_OFFSET_CHANGED = 4; 30 public static final int EVENT_TYPE_EXT_AUDIO_OUT_LOCATION_CHANGED = 5; 31 public static final int EVENT_TYPE_EXT_AUDIO_OUT_DESCRIPTION_CHANGED = 6; 32 33 public int type; 34 public BluetoothDevice device; 35 public int valueInt1; 36 public int valueInt2; 37 public int valueInt3; 38 public boolean valueBool1; 39 public boolean valueBool2; 40 public String valueString1; 41 42 /* Might need more for other callbacks*/ 43 VolumeControlStackEvent(int type)44 VolumeControlStackEvent(int type) { 45 this.type = type; 46 } 47 48 @Override toString()49 public String toString() { 50 // event dump 51 StringBuilder result = new StringBuilder(); 52 result.append("VolumeControlStackEvent {type:").append(eventTypeToString(type)); 53 result.append(", device:").append(device); 54 result.append(", valueInt1:").append(eventTypeValue1ToString(type, valueInt1)); 55 result.append(", valueInt2:").append(eventTypeValue2ToString(type, valueInt2)); 56 result.append(", valueInt3:").append(eventTypeValue3ToString(type, valueInt3)); 57 result.append(", valueBool1:").append(eventTypeValueBool1ToString(type, valueBool1)); 58 result.append(", valueBool2:").append(eventTypeValueBool2ToString(type, valueBool2)); 59 result.append(", valueString1:").append(eventTypeString1ToString(type, valueString1)); 60 result.append("}"); 61 return result.toString(); 62 } 63 eventTypeToString(int type)64 private static String eventTypeToString(int type) { 65 switch (type) { 66 case EVENT_TYPE_NONE: 67 return "EVENT_TYPE_NONE"; 68 case EVENT_TYPE_CONNECTION_STATE_CHANGED: 69 return "EVENT_TYPE_CONNECTION_STATE_CHANGED"; 70 case EVENT_TYPE_VOLUME_STATE_CHANGED: 71 return "EVENT_TYPE_VOLUME_STATE_CHANGED"; 72 case EVENT_TYPE_DEVICE_AVAILABLE: 73 return "EVENT_TYPE_DEVICE_AVAILABLE"; 74 case EVENT_TYPE_EXT_AUDIO_OUT_VOL_OFFSET_CHANGED: 75 return "EVENT_TYPE_EXT_AUDIO_OUT_VOL_OFFSET_CHANGED"; 76 case EVENT_TYPE_EXT_AUDIO_OUT_LOCATION_CHANGED: 77 return "EVENT_TYPE_EXT_AUDIO_OUT_LOCATION_CHANGED"; 78 case EVENT_TYPE_EXT_AUDIO_OUT_DESCRIPTION_CHANGED: 79 return "EVENT_TYPE_EXT_AUDIO_OUT_DESCRIPTION_CHANGED"; 80 default: 81 return "EVENT_TYPE_UNKNOWN:" + type; 82 } 83 } 84 eventTypeValue1ToString(int type, int value)85 private static String eventTypeValue1ToString(int type, int value) { 86 switch (type) { 87 case EVENT_TYPE_CONNECTION_STATE_CHANGED: 88 return BluetoothProfile.getConnectionStateName(value); 89 case EVENT_TYPE_VOLUME_STATE_CHANGED: 90 return "{group_id:" + value + "}"; 91 case EVENT_TYPE_DEVICE_AVAILABLE: 92 return "{num_ext_outputs:" + value + "}"; 93 case EVENT_TYPE_EXT_AUDIO_OUT_VOL_OFFSET_CHANGED: 94 case EVENT_TYPE_EXT_AUDIO_OUT_LOCATION_CHANGED: 95 case EVENT_TYPE_EXT_AUDIO_OUT_DESCRIPTION_CHANGED: 96 return "{ext output id:" + value + "}"; 97 default: 98 break; 99 } 100 return Integer.toString(value); 101 } 102 eventTypeValue2ToString(int type, int value)103 private static String eventTypeValue2ToString(int type, int value) { 104 switch (type) { 105 case EVENT_TYPE_VOLUME_STATE_CHANGED: 106 return "{volume:" + value + "}"; 107 case EVENT_TYPE_DEVICE_AVAILABLE: 108 return "{num_ext_inputs:" + value + "}"; 109 default: 110 break; 111 } 112 return Integer.toString(value); 113 } 114 eventTypeValue3ToString(int type, int value)115 private static String eventTypeValue3ToString(int type, int value) { 116 switch (type) { 117 case EVENT_TYPE_VOLUME_STATE_CHANGED: 118 return "{flags:" + value + "}"; 119 default: 120 break; 121 } 122 return Integer.toString(value); 123 } 124 eventTypeValueBool1ToString(int type, boolean value)125 private static String eventTypeValueBool1ToString(int type, boolean value) { 126 switch (type) { 127 case EVENT_TYPE_VOLUME_STATE_CHANGED: 128 return "{muted:" + value + "}"; 129 default: 130 break; 131 } 132 return Boolean.toString(value); 133 } 134 eventTypeValueBool2ToString(int type, boolean value)135 private static String eventTypeValueBool2ToString(int type, boolean value) { 136 switch (type) { 137 case EVENT_TYPE_VOLUME_STATE_CHANGED: 138 return "{isAutonomous:" + value + "}"; 139 default: 140 break; 141 } 142 return Boolean.toString(value); 143 } 144 eventTypeString1ToString(int type, String value)145 private static String eventTypeString1ToString(int type, String value) { 146 switch (type) { 147 case EVENT_TYPE_EXT_AUDIO_OUT_DESCRIPTION_CHANGED: 148 return "{description:" + value + "}"; 149 default: 150 break; 151 } 152 return value; 153 } 154 } 155