16fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong/* 26fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Copyright (C) 2015 The Android Open Source Project 36fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 46fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Licensed under the Apache License, Version 2.0 (the "License"); 56fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * you may not use this file except in compliance with the License. 66fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * You may obtain a copy of the License at 76fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 86fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * http://www.apache.org/licenses/LICENSE-2.0 96fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 106fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Unless required by applicable law or agreed to in writing, software 116fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * distributed under the License is distributed on an "AS IS" BASIS, 126fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * See the License for the specific language governing permissions and 146fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * limitations under the License 156fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 166fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 176fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rongpackage com.android.dialer.database; 186fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 196fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rongimport android.net.Uri; 206fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rongimport android.provider.BaseColumns; 217e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong 227e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rongimport com.android.dialerbind.ObjectFactory; 236fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 246fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong/** 256fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <p> 266fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The contract between the filtered number provider and applications. Contains 276fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * definitions for the supported URIs and columns. 286fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Currently only accessible within Dialer. 296fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * </p> 306fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 316fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rongpublic final class FilteredNumberContract { 326fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 336fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** The authority for the filtered numbers provider */ 347e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong public static final String AUTHORITY = ObjectFactory.getFilteredNumberProviderAuthority(); 356fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 366fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** A content:// style uri to the authority for the filtered numbers provider */ 376fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY); 386fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 396fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** The type of filtering to be applied, e.g. block the number or whitelist the number. */ 406fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public interface FilteredNumberTypes { 416fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final int UNDEFINED = 0; 426fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 436fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Dialer will disconnect the call without sending the caller to voicemail. 446fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 456fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final int BLOCKED_NUMBER = 1; 466fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong } 476fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 486fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** The original source of the filtered number, e.g. the user manually added it. */ 496fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public interface FilteredNumberSources { 506fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final int UNDEFINED = 0; 516fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 526fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The user manually added this number through Dialer (e.g. from the call log or InCallUI). 536fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 546fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final int USER = 1; 556fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong } 566fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 576fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public interface FilteredNumberColumns { 586fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong // TYPE: INTEGER 596fb201a4f048e1a5763465a2e31f3a93e649fff7Anne Rong static final String _ID = "_id"; 606fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 616fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Represents the number to be filtered, normalized to compare phone numbers for equality. 626fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 636fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: TEXT 646fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 656fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String NORMALIZED_NUMBER = "normalized_number"; 666fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 677e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong * Represents the number to be filtered, for formatting and 687e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong * used with country iso for contact lookups. 697e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong * 707e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong * TYPE: TEXT 717e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong */ 727e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong static final String NUMBER = "number"; 737e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong /** 746fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The country code representing the country detected when 756fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * the phone number was added to the database. 766fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Most numbers don't have the country code, so a best guess is provided by 776fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * the country detector system. The country iso is also needed in order to format 786fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * phone numbers correctly. 796fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 806fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: TEXT 816fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 826fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String COUNTRY_ISO = "country_iso"; 836fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 846fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The number of times the number has been filtered by Dialer. 856fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * When this number is incremented, LAST_TIME_FILTERED should also be updated to 866fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * the current time. 876fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 886fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: INTEGER 896fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 906fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String TIMES_FILTERED = "times_filtered"; 916fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 926fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Set to the current time when the phone number is filtered. 936fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * When this is updated, TIMES_FILTERED should also be incremented. 946fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 956fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: LONG 966fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 976fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String LAST_TIME_FILTERED = "last_time_filtered"; 986fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong // TYPE: LONG 996fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String CREATION_TIME = "creation_time"; 1006fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1016fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Indicates the type of filtering to be applied. 1026fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 1036fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: INTEGER 1046fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * See {@link FilteredNumberTypes} 1056fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1066fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String TYPE = "type"; 1076fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1086fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Integer representing the original source of the filtered number. 1096fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * 1106fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * TYPE: INTEGER 1116fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * See {@link FilteredNumberSources} 1126fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1136fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong static final String SOURCE = "source"; 1146fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong } 1156fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1166fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1176fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <p> 1186fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * Constants for the table of filtered numbers. 1196fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * </p> 1206fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <h3>Operations</h3> 1216fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dl> 1226fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dt><b>Insert</b></dt> 1237e488f53b356e04b83ea34549ffcba27d850eb9aAnne Rong * <dd>Required fields: NUMBER, NORMALIZED_NUMBER, TYPE, SOURCE. 1246fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * A default value will be used for the other fields if left null.</dd> 1256fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dt><b>Update</b></dt> 1266fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dt><b>Delete</b></dt> 1276fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dt><b>Query</b></dt> 1286fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * <dd>{@link #CONTENT_URI} can be used for any query, append an ID to 1296fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * retrieve a specific filtered number entry.</dd> 1306fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * </dl> 1316fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1326fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static class FilteredNumber implements BaseColumns { 1336fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1346fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static final String FILTERED_NUMBERS_TABLE = "filtered_numbers_table"; 1351b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong public static final String FILTERED_NUMBERS_INCREMENT_FILTERED_COUNT = 1361b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong "filtered_numbers_increment_filtered_count"; 1376fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1386fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static final Uri CONTENT_URI = Uri.withAppendedPath( 1396fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong AUTHORITY_URI, 1406fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong FILTERED_NUMBERS_TABLE); 1416fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1421b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong public static final Uri CONTENT_URI_INCREMENT_FILTERED_COUNT = Uri.withAppendedPath( 1431b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong AUTHORITY_URI, 1441b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong FILTERED_NUMBERS_INCREMENT_FILTERED_COUNT); 1451b4545d7b500e4e18a0f5be43a8052fce2112ae0Anne Rong 1466fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1476fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * This utility class cannot be instantiated. 1486fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1496fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong private FilteredNumber () {} 1506fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1516fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1526fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The MIME type of {@link #CONTENT_URI} providing a directory of 1536fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * filtered numbers. 1546fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1556fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static final String CONTENT_TYPE = "vnd.android.cursor.dir/filtered_numbers_table"; 1566fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong 1576fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong /** 1586fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong * The MIME type of a {@link #CONTENT_URI} single filtered number. 1596fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong */ 1606fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong public static final String CONTENT_ITEM_TYPE = 1616fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong "vnd.android.cursor.item/filtered_numbers_table"; 1626fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong } 1636fcdcc15f3b8786e0ecab5886324eeb212c58699Anne Rong} 164