12ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh/*
22ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * Copyright (C) 2011 The Android Open Source Project
32ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh *
42ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * Licensed under the Apache License, Version 2.0 (the "License");
52ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * you may not use this file except in compliance with the License.
62ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * You may obtain a copy of the License at
72ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh *
82ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh *      http://www.apache.org/licenses/LICENSE-2.0
92ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh *
102ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * Unless required by applicable law or agreed to in writing, software
112ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * distributed under the License is distributed on an "AS IS" BASIS,
122ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * See the License for the specific language governing permissions and
142ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * limitations under the License.
152ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh */
162ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
172ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
182ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganeshpackage android.bluetooth;
192ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
202ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganeshimport android.os.Parcel;
212ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganeshimport android.os.Parcelable;
222ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
232ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh/**
242ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * The Bluetooth Health Application Configuration that is used in conjunction with
252ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * the {@link BluetoothHealth} class. This class represents an application configuration
262ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * that the Bluetooth Health third party application will register to communicate with the
272ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh * remote Bluetooth health device.
282ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh *
292ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh */
302ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganeshpublic final class BluetoothHealthAppConfiguration implements Parcelable {
312ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    private final String mName;
322ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    private final int mDataType;
332ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    private final int mRole;
342ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    private final int mChannelType;
352ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
362ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
372ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Constructor to register the SINK role
382ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
392ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @param name Friendly name associated with the application configuration
402ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @param dataType Data Type of the remote Bluetooth Health device
41eb9d34630f74d0260690287f2df57c0cd3d7ba1dJaikumar Ganesh     * @hide
422ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
43fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh    BluetoothHealthAppConfiguration(String name, int dataType) {
442ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mName = name;
452ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mDataType = dataType;
462ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mRole = BluetoothHealth.SINK_ROLE;
472ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mChannelType = BluetoothHealth.CHANNEL_TYPE_ANY;
482ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
492ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
502ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
512ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Constructor to register the application configuration.
522ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
532ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @param name Friendly name associated with the application configuration
542ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @param dataType Data Type of the remote Bluetooth Health device
55fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh     * @param role {@link BluetoothHealth#SOURCE_ROLE} or
56fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh     *                     {@link BluetoothHealth#SINK_ROLE}
57eb9d34630f74d0260690287f2df57c0cd3d7ba1dJaikumar Ganesh     * @hide
582ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
59fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh    BluetoothHealthAppConfiguration(String name, int dataType, int role, int
60fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh        channelType) {
612ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mName = name;
622ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mDataType = dataType;
632ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mRole = role;
642ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        mChannelType = channelType;
652ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
662ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
672ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    @Override
682ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public boolean equals(Object o) {
692ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        if (o instanceof BluetoothHealthAppConfiguration) {
702ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            BluetoothHealthAppConfiguration config = (BluetoothHealthAppConfiguration) o;
712ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            // config.getName() can never be NULL
722ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            return mName.equals(config.getName()) &&
732ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh                    mDataType == config.getDataType() &&
742ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh                    mRole == config.getRole() &&
75fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh                    mChannelType == config.getChannelType();
762ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        }
772ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return false;
782ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
792ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
802ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    @Override
812ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public int hashCode() {
822ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        int result = 17;
832ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        result = 31 * result + (mName != null ? mName.hashCode() : 0);
842ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        result = 31 * result + mDataType;
852ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        result = 31 * result + mRole;
862ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        result = 31 * result + mChannelType;
872ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return result;
882ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
892ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
902ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    @Override
912ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public String toString() {
922ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return "BluetoothHealthAppConfiguration [mName = " + mName +
932ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            ",mDataType = " + mDataType + ", mRole = " + mRole + ",mChannelType = " +
94fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh            mChannelType + "]";
952ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
962ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
972ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public int describeContents() {
982ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return 0;
992ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1002ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1012ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
1022ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Return the data type associated with this application configuration.
1032ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
1042ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @return dataType
1052ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
1062ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public int getDataType() {
1072ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return mDataType;
1082ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1092ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1102ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
1112ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Return the name of the application configuration.
1122ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
1132ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @return String name
1142ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
1152ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public String getName() {
1162ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return mName;
1172ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1182ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1192ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
1202ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Return the role associated with this application configuration.
1212ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
1222ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @return One of {@link BluetoothHealth#SOURCE_ROLE} or
1232ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *                         {@link BluetoothHealth#SINK_ROLE}
1242ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
1252ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public int getRole() {
1262ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return mRole;
1272ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1282ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1292ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    /**
1302ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * Return the channel type associated with this application configuration.
1312ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *
1322ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     * @return One of {@link BluetoothHealth#CHANNEL_TYPE_RELIABLE} or
1332ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *                         {@link BluetoothHealth#CHANNEL_TYPE_STREAMING} or
1342ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     *                         {@link BluetoothHealth#CHANNEL_TYPE_ANY}.
135eb9d34630f74d0260690287f2df57c0cd3d7ba1dJaikumar Ganesh     * @hide
1362ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh     */
1372ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public int getChannelType() {
1382ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        return mChannelType;
1392ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1402ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1412ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public static final Parcelable.Creator<BluetoothHealthAppConfiguration> CREATOR =
1422ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        new Parcelable.Creator<BluetoothHealthAppConfiguration>() {
143fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh        @Override
1442ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        public BluetoothHealthAppConfiguration createFromParcel(Parcel in) {
1452ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            String name = in.readString();
1462ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            int type = in.readInt();
1472ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            int role = in.readInt();
1482ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            int channelType = in.readInt();
149fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh            return new BluetoothHealthAppConfiguration(name, type, role,
150fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh                channelType);
1512ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        }
152fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh
153fb658c72a3a76dac334c39070d1501a2575c1069Jaikumar Ganesh        @Override
1542ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        public BluetoothHealthAppConfiguration[] newArray(int size) {
1552ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh            return new BluetoothHealthAppConfiguration[size];
1562ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        }
1572ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    };
1582ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh
1592ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    public void writeToParcel(Parcel out, int flags) {
1602ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        out.writeString(mName);
1612ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        out.writeInt(mDataType);
1622ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        out.writeInt(mRole);
1632ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh        out.writeInt(mChannelType);
1642ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh    }
1652ea1e85dcb57d17f5782dbafa1d25eb51c630e4bJaikumar Ganesh}
166