diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 8aa47a273fa..cd9215cb266 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -25,6 +25,7 @@ import android.app.AppGlobals; import android.app.Dialog; import android.app.Fragment; import android.app.IActivityManager; +import android.app.KeyguardManager; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.ContentResolver; @@ -49,8 +50,6 @@ import android.net.LinkProperties; import android.net.Uri; import android.os.BatteryManager; import android.os.Bundle; -import android.os.Handler; -import android.os.HandlerThread; import android.os.IBinder; import android.os.INetworkManagementService; import android.os.Looper; @@ -92,6 +91,7 @@ import android.widget.TabWidget; import com.android.internal.app.UnlaunchableAppActivity; import com.android.internal.util.ArrayUtils; import com.android.internal.util.UserIcons; +import com.android.internal.widget.LockPatternUtils; import java.io.IOException; import java.io.InputStream; @@ -1129,6 +1129,30 @@ public final class Utils extends com.android.settingslib.Utils { return false; } + public static boolean unlockWorkProfileIfNecessary(Context context, int userId) { + try { + if (!ActivityManagerNative.getDefault().isUserRunning(userId, + ActivityManager.FLAG_AND_LOCKED)) { + return false; + } + } catch (RemoteException e) { + return false; + } + if (!(new LockPatternUtils(context)).isSecure(userId)) { + return false; + } + final KeyguardManager km = (KeyguardManager) context.getSystemService( + Context.KEYGUARD_SERVICE); + final Intent unlockIntent = km.createConfirmDeviceCredentialIntent(null, null, userId); + if (unlockIntent != null) { + context.startActivity(unlockIntent); + return true; + } else { + return false; + } + + } + public static CharSequence getApplicationLabel(Context context, String packageName) { try { final ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo( diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java index c89e185e7b1..7e391831d56 100644 --- a/src/com/android/settings/accounts/AccountSettings.java +++ b/src/com/android/settings/accounts/AccountSettings.java @@ -548,6 +548,14 @@ public class AccountSettings extends SettingsPreferenceFragment @Override public boolean onPreferenceClick(Preference preference) { if (mFragment != null) { + UserHandle user = mFragmentArguments.getParcelable(EXTRA_USER); + if (user != null && Utils.startQuietModeDialogIfNecessary(getContext(), mUm, + user.getIdentifier())) { + return true; + } else if (user != null && Utils.unlockWorkProfileIfNecessary(getContext(), + user.getIdentifier())) { + return true; + } Utils.startWithFragment(getContext(), mFragment, mFragmentArguments, null /* resultTo */, 0 /* resultRequestCode */, mTitleResPackageName, mTitleResId, null /* title */);