/* * 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 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(); /** 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; } }