1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.dialer.compat; 17 18 import android.content.Context; 19 import android.os.Process; 20 import android.os.UserHandle; 21 import android.os.UserManager; 22 23 import com.android.contacts.common.compat.CompatUtils; 24 25 /** 26 * Compatibility class for {@link UserManager}. 27 */ 28 public class UserManagerCompat { 29 /** 30 * A user id constant to indicate the "system" user of the device. Copied from 31 * {@link UserHandle}. 32 */ 33 private static final int USER_SYSTEM = 0; 34 /** 35 * Range of uids allocated for a user. 36 */ 37 private static final int PER_USER_RANGE = 100000; 38 39 /** 40 * Used to check if this process is running under the system user. The system user is the 41 * initial user that is implicitly created on first boot and hosts most of the system services. 42 * 43 * @return whether this process is running under the system user. 44 */ isSystemUser(UserManager userManager)45 public static boolean isSystemUser(UserManager userManager) { 46 if (CompatUtils.isMarshmallowCompatible()) { 47 return userManager.isSystemUser(); 48 } 49 // Adapted from {@link UserManager} and {@link UserHandle}. 50 return (Process.myUid() / PER_USER_RANGE) == USER_SYSTEM; 51 } 52 53 /** 54 * Return whether the calling user is running in an "unlocked" state. A user 55 * is unlocked only after they've entered their credentials (such as a lock 56 * pattern or PIN), and credential-encrypted private app data storage is 57 * available. 58 * 59 * TODO b/26688153 60 * 61 * @param context the current context 62 * @return {@code true} if the user is unlocked, {@code false} otherwise 63 * @throws NullPointerException if context is null 64 */ isUserUnlocked(Context context)65 public static boolean isUserUnlocked(Context context) { 66 if (CompatUtils.isNCompatible()) { 67 return UserManagerSdkCompat.isUserUnlocked(context); 68 } 69 return true; 70 } 71 } 72