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