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