11bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal/* 21bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Copyright (C) 2015 The Android Open Source Project 31bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 41bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Licensed under the Apache License, Version 2.0 (the "License"); 51bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * you may not use this file except in compliance with the License. 61bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * You may obtain a copy of the License at 71bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 81bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * http://www.apache.org/licenses/LICENSE-2.0 91bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 101bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Unless required by applicable law or agreed to in writing, software 111bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * distributed under the License is distributed on an "AS IS" BASIS, 121bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * See the License for the specific language governing permissions and 141bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * limitations under the License. 151bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 161bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 171bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalpackage android.bluetooth; 181bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 191bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalimport android.os.Parcel; 201bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalimport android.os.Parcelable; 211bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalimport android.util.Log; 221bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 231bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalimport java.util.HashMap; 241bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalimport java.util.Map; 251bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 261bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal/** 271bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Class used to identify settings associated with the player on AG. 281bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 291bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * {@hide} 301bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 311bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwalpublic final class BluetoothAvrcpPlayerSettings implements Parcelable { 321bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final String TAG = "BluetoothAvrcpPlayerSettings"; 331bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 341bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 351bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Equalizer setting. 361bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 371bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int SETTING_EQUALIZER = 0x01; 381bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 391bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 401bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Repeat setting. 411bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 421bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int SETTING_REPEAT = 0x02; 431bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 441bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 451bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Shuffle setting. 461bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 471bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int SETTING_SHUFFLE = 0x04; 481bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 491bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 501bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Scan mode setting. 511bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 521bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int SETTING_SCAN = 0x08; 531bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 541bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 551bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Invalid state. 561bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 571bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Used for returning error codes. 581bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 591bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_INVALID = -1; 601bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 611bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 621bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * OFF state. 631bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 641bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Denotes a general OFF state. Applies to all settings. 651bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 661bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_OFF = 0x00; 671bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 681bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 691bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * ON state. 701bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 711bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Applies to {@link SETTING_EQUALIZER}. 721bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 731bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_ON = 0x01; 741bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 751bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 761bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Single track repeat. 771bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 781bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Applies only to {@link SETTING_REPEAT}. 791bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 801bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_SINGLE_TRACK = 0x02; 811bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 821bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 831bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * All track repeat/shuffle. 841bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 851bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Applies to {@link SETTING_REPEAT}, {@link SETTING_SHUFFLE} and {@link SETTING_SCAN}. 861bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 871bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_ALL_TRACK = 0x03; 881bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 891bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 901bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Group repeat/shuffle. 911bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 921bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Applies to {@link SETTING_REPEAT}, {@link SETTING_SHUFFLE} and {@link SETTING_SCAN}. 931bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 941bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final int STATE_GROUP = 0x04; 951bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 961bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 971bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * List of supported settings ORed. 981bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 991bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal private int mSettings; 1001bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1011bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 1021bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Hash map of current capability values. 1031bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 1041bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal private Map<Integer, Integer> mSettingsValue = new HashMap<Integer, Integer>(); 1051bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1061bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public int describeContents() { 1071bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal return 0; 1081bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1091bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1101bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public void writeToParcel(Parcel out, int flags) { 1111bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal out.writeInt(mSettings); 1121bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal out.writeInt(mSettingsValue.size()); 1131bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal for (int k : mSettingsValue.keySet()) { 1141bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal out.writeInt(k); 1151bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal out.writeInt(mSettingsValue.get(k)); 1161bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1171bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1181bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1191bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public static final Parcelable.Creator<BluetoothAvrcpPlayerSettings> CREATOR 1201bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal = new Parcelable.Creator<BluetoothAvrcpPlayerSettings>() { 1211bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public BluetoothAvrcpPlayerSettings createFromParcel(Parcel in) { 1221bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal return new BluetoothAvrcpPlayerSettings(in); 1231bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1241bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1251bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public BluetoothAvrcpPlayerSettings[] newArray(int size) { 1261bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal return new BluetoothAvrcpPlayerSettings[size]; 1271bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1281bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal }; 1291bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1301bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal private BluetoothAvrcpPlayerSettings(Parcel in) { 1311bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal mSettings = in.readInt(); 1321bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal int numSettings = in.readInt(); 1331bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal for (int i = 0; i < numSettings; i++) { 1341bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal mSettingsValue.put(in.readInt(), in.readInt()); 1351bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1361bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1371bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1381bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 1391bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Create a new player settings object. 1401bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 1411bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @param settings a ORed value of SETTINGS_* defined above. 1421bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 1431bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public BluetoothAvrcpPlayerSettings(int settings) { 1441bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal mSettings = settings; 1451bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1461bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1471bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 1481bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Get the supported settings. 1491bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 1501bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @return int ORed value of supported settings. 1511bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 1521bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public int getSettings() { 1531bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal return mSettings; 1541bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1551bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1561bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 1571bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Add a setting value. 1581bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 1591bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * The setting must be part of possible settings in {@link getSettings()}. 1601bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @param setting setting config. 1611bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @param value value for the setting. 1621bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @throws IllegalStateException if the setting is not supported. 1631bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 1641bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public void addSettingValue(int setting, int value) { 1651bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal if ((setting & mSettings) == 0) { 1661bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal Log.e(TAG, "Setting not supported: " + setting + " " + mSettings); 1671bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal throw new IllegalStateException("Setting not supported: " + setting); 1681bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1691bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal mSettingsValue.put(setting, value); 1701bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1711bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal 1721bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal /** 1731bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * Get a setting value. 1741bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * 1751bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * The setting must be part of possible settings in {@link getSettings()}. 1761bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @param setting setting config. 1771bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @return value value for the setting. 1781bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal * @throws IllegalStateException if the setting is not supported. 1791bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal */ 1801bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal public int getSettingValue(int setting) { 1811bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal if ((setting & mSettings) == 0) { 1821bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal Log.e(TAG, "Setting not supported: " + setting + " " + mSettings); 1831bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal throw new IllegalStateException("Setting not supported: " + setting); 1841bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1851bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal Integer i = mSettingsValue.get(setting); 1861bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal if (i == null) return -1; 1871bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal return i; 1881bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal } 1891bec6a5b0d67f120b7013572f6b1a4f1e1b3c584Sanket Agarwal} 190