blob: 41ac5123669718817ca384f207129828e5920c97 [file] [log] [blame]
/*
* Copyright (C) 2016 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.bluetooth.util;
import java.util.ArrayList;
import java.util.List;
/**
* Centralized Bluetooth Interoperability workaround utilities and database.
* This is the Java version. An analagous native version can be found
* in /system/bt/devices/include/interop_database.h.
*/
public class Interop {
/**
* Simple interop entry consisting of a workarond id (see below)
* and a (partial or complete) Bluetooth device address string
* to match against.
*/
private static class Entry {
public String address;
public int workaround_id;
Entry(int workaroundId, String address) {
this.workaround_id = workaroundId;
this.address = address;
}
}
/**
* The actual "database" of interop entries.
*/
private static List<Entry> sEntries = null;
/**
* Workaround ID for deivces which do not accept non-ASCII
* characters in SMS messages.
*/
public static final int INTEROP_MAP_ASCIIONLY = 1;
/**
* Initializes the interop datbase with the relevant workaround
* entries.
* When adding entries, please provide a description for each
* device as to what problem the workaround addresses.
*/
private static void lazyInitInteropDatabase() {
if (sEntries != null) {
return;
}
sEntries = new ArrayList<Entry>();
/** Mercedes Benz NTG 4.5 does not handle non-ASCII characters in SMS */
sEntries.add(new Entry(INTEROP_MAP_ASCIIONLY, "00:26:e8"));
}
/**
* Checks wheter a given device identified by |address| is a match
* for a given workaround identified by |workaroundId|.
* Return true if the address matches, false otherwise.
*/
public static boolean matchByAddress(int workaroundId, String address) {
if (address == null || address.isEmpty()) {
return false;
}
lazyInitInteropDatabase();
for (Entry entry : sEntries) {
if (entry.workaround_id == workaroundId && entry.address.startsWith(
address.toLowerCase())) {
return true;
}
}
return false;
}
}