1e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen/*
2e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * Copyright (C) 2014 The Android Open Source Project
3e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen *
4e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * Licensed under the Apache License, Version 2.0 (the "License");
5e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * you may not use this file except in compliance with the License.
6e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * You may obtain a copy of the License at
7e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen *
8e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen *      http://www.apache.org/licenses/LICENSE-2.0
9e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen *
10e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * Unless required by applicable law or agreed to in writing, software
11e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * distributed under the License is distributed on an "AS IS" BASIS,
12e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * See the License for the specific language governing permissions and
14e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * limitations under the License.
15e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen */
16e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
17e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenpackage com.android.providers.telephony;
18e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
19e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenimport android.content.ContentValues;
20e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenimport android.content.Context;
21e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenimport android.os.Process;
22e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenimport android.provider.Telephony;
2372f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen
2472f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wenimport com.android.internal.telephony.SmsApplication;
25e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
26e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen/**
27e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen * Helpers
28e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen */
29e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wenpublic class ProviderUtil {
30e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
31e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    /**
3272f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * Check if a caller of the provider has restricted access,
3372f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * i.e. being non-system, non-phone, non-default SMS app
34e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     *
3572f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * @param context the context to use
3672f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * @param packageName the caller package name
3772f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * @param uid the caller uid
3872f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen     * @return true if the caller is not system, or phone or default sms app, false otherwise
39e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     */
4072f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen    public static boolean isAccessRestricted(Context context, String packageName, int uid) {
4172f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen        return (uid != Process.SYSTEM_UID
4272f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen                && uid != Process.PHONE_UID
4372f135589e5d705bcac4a3db3019e4d9d2d04d36Ye Wen                && !SmsApplication.isDefaultSmsApplication(context, packageName));
44e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    }
45e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
46e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    /**
47e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * Whether should set CREATOR for an insertion
48e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     *
49e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @param values The content of the message
50e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @param uid The caller UID of the insertion
51e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @return true if we should set CREATOR, false otherwise
52e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     */
53e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    public static boolean shouldSetCreator(ContentValues values, int uid) {
54e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen        return (uid != Process.SYSTEM_UID && uid != Process.PHONE_UID) ||
55e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen                (!values.containsKey(Telephony.Sms.CREATOR) &&
56e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen                        !values.containsKey(Telephony.Mms.CREATOR));
57e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    }
58e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen
59e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    /**
60e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * Whether should remove CREATOR for an update
61e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     *
62e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @param values The content of the message
63e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @param uid The caller UID of the update
64e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     * @return true if we should remove CREATOR, false otherwise
65e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen     */
66e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    public static boolean shouldRemoveCreator(ContentValues values, int uid) {
67e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen        return (uid != Process.SYSTEM_UID && uid != Process.PHONE_UID) &&
68e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen                (values.containsKey(Telephony.Sms.CREATOR) ||
69e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen                        values.containsKey(Telephony.Mms.CREATOR));
70e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen    }
71e07acb9f6a77d9753900224a4caefd5a8aec97eeYe Wen}
72