summaryrefslogtreecommitdiffstats
path: root/policy/src/com/android
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2012-09-05 16:23:58 -0700
committerAdam Cohen <adamcohen@google.com>2012-09-06 14:35:56 -0700
commit66b9fb1662b304d24984af1ac4cc02f2ae8f4cc3 (patch)
tree3cf8092faf12de22666d5d464b4e9b360ac1f1fc /policy/src/com/android
parentfb3ec448f1208d75edebff0e93fa97a8913ff29e (diff)
downloadframeworks_base-66b9fb1662b304d24984af1ac4cc02f2ae8f4cc3.zip
frameworks_base-66b9fb1662b304d24984af1ac4cc02f2ae8f4cc3.tar.gz
frameworks_base-66b9fb1662b304d24984af1ac4cc02f2ae8f4cc3.tar.bz2
Iintial stab at multi-user switcher on Keyguard
Change-Id: I604a769ef43c354a8eeadb415e413c19ca02571d
Diffstat (limited to 'policy/src/com/android')
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java24
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java89
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java84
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java20
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java3
5 files changed, 210 insertions, 10 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
index 058bf92..7e148b3 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -29,26 +29,30 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
+import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Canvas;
+import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.Button;
-import android.widget.ViewFlipper;
import android.widget.RemoteViews.OnClickHandler;
+import android.widget.ViewFlipper;
+import com.android.internal.R;
import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.R;
import java.io.File;
import java.util.ArrayList;
+import java.util.List;
public class KeyguardHostView extends KeyguardViewBase {
// Use this to debug all of keyguard
@@ -614,6 +618,7 @@ public class KeyguardHostView extends KeyguardViewBase {
Log.v(TAG, "Keyguard widgets disabled because of device policy admin");
return;
}
+ inflateAndAddUserSelectorWidgetIfNecessary();
SharedPreferences prefs = mContext.getSharedPreferences(
KEYGUARD_WIDGET_PREFS, Context.MODE_PRIVATE);
for (String key : prefs.getAll().keySet()) {
@@ -627,6 +632,21 @@ public class KeyguardHostView extends KeyguardViewBase {
}
}
+ private void inflateAndAddUserSelectorWidgetIfNecessary() {
+ // if there are multiple users, we need to add the multi-user switcher widget to the
+ // keyguard.
+ UserManager mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ List<UserInfo> users = mUm.getUsers();
+
+ if (users.size() > 1) {
+ KeyguardWidgetFrame userswitcher = (KeyguardWidgetFrame)
+ LayoutInflater.from(mContext).inflate(R.layout.keyguard_multi_user_selector_widget,
+ mAppWidgetContainer, false);
+ // add the switcher in the first position
+ mAppWidgetContainer.addView(userswitcher, 0);
+ }
+ }
+
@Override
public void cleanUp() {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
new file mode 100644
index 0000000..8aef68f
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.policy.impl.keyguard;
+
+import android.app.ActivityManagerNative;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.graphics.drawable.Drawable;
+import android.os.RemoteException;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManagerGlobal;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.internal.R;
+
+class KeyguardMultiUserAvatar extends FrameLayout {
+ private static final String TAG = "KeyguardViewHost";
+
+ private ImageView mUserImage;
+ private TextView mUserName;
+ private UserInfo mUserInfo;
+ private KeyguardMultiUserSelectorView mUserSelector;
+
+ public static KeyguardMultiUserAvatar fromXml(int resId, Context context,
+ KeyguardMultiUserSelectorView userSelector, UserInfo info) {
+ KeyguardMultiUserAvatar icon = (KeyguardMultiUserAvatar)
+ LayoutInflater.from(context).inflate(resId, userSelector, false);
+
+ icon.setup(info, userSelector);
+ return icon;
+ }
+
+ public KeyguardMultiUserAvatar(Context context) {
+ super(context, null, 0);
+ }
+
+ public KeyguardMultiUserAvatar(Context context, AttributeSet attrs) {
+ super(context, attrs, 0);
+ }
+
+ public KeyguardMultiUserAvatar(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ public void setup(UserInfo user, KeyguardMultiUserSelectorView userSelector) {
+ mUserInfo = user;
+ mUserSelector = userSelector;
+ init();
+ }
+
+ private void init() {
+ mUserImage = (ImageView) findViewById(R.id.keyguard_user_avatar);
+ mUserName = (TextView) findViewById(R.id.keyguard_user_name);
+
+ mUserImage.setImageDrawable(Drawable.createFromPath(mUserInfo.iconPath));
+ mUserName.setText(mUserInfo.name);
+ setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ ActivityManagerNative.getDefault().switchUser(mUserInfo.id);
+ WindowManagerGlobal.getWindowManagerService().lockNow();
+ mUserSelector.init();
+ } catch (RemoteException re) {
+ Log.e(TAG, "Couldn't switch user " + re);
+ }
+ }
+ });
+ }
+}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
new file mode 100644
index 0000000..ba99a55
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.policy.impl.keyguard;
+
+import android.app.ActivityManagerNative;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserManager;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+import com.android.internal.R;
+
+import java.util.ArrayList;
+
+public class KeyguardMultiUserSelectorView extends LinearLayout{
+ private KeyguardMultiUserAvatar mActiveUser;
+ private LinearLayout mInactiveUsers;
+
+ public KeyguardMultiUserSelectorView(Context context) {
+ this(context, null, 0);
+ }
+
+ public KeyguardMultiUserSelectorView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public KeyguardMultiUserSelectorView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ protected void onFinishInflate () {
+ init();
+ }
+
+ public void init() {
+ mActiveUser = (KeyguardMultiUserAvatar) findViewById(R.id.keyguard_active_user);
+ mInactiveUsers = (LinearLayout) findViewById(R.id.keyguard_inactive_users);
+
+ mInactiveUsers.removeAllViews();
+
+ UserInfo currentUser;
+ try {
+ currentUser = ActivityManagerNative.getDefault().getCurrentUser();
+ } catch (RemoteException re) {
+ currentUser = null;
+ }
+
+ UserManager mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUm.getUsers());
+ for (UserInfo user: users) {
+ if (user.id == currentUser.id) {
+ setActiveUser(user);
+ } else {
+ createAndAddInactiveUser(user);
+ }
+ }
+ }
+
+ private void setActiveUser(UserInfo user) {
+ mActiveUser.setup(user, this);
+ }
+
+ private void createAndAddInactiveUser(UserInfo user) {
+ KeyguardMultiUserAvatar uv = KeyguardMultiUserAvatar.fromXml(
+ R.layout.keyguard_multi_user_avatar, mContext, this, user);
+ mInactiveUsers.addView(uv);
+ }
+}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
index e8078fd..f957753 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
@@ -38,6 +38,7 @@ public class KeyguardWidgetFrame extends FrameLayout {
private static Drawable sRightOverscrollDrawable;
private Drawable mForegroundDrawable;
+ private float mOverScrollAmount = 0f;
private final Rect mForegroundRect = new Rect();
private int mForegroundAlpha = 0;
@@ -80,14 +81,17 @@ public class KeyguardWidgetFrame extends FrameLayout {
}
void setOverScrollAmount(float r, boolean left) {
- if (left && mForegroundDrawable != sLeftOverscrollDrawable) {
- mForegroundDrawable = sLeftOverscrollDrawable;
- } else if (!left && mForegroundDrawable != sRightOverscrollDrawable) {
- mForegroundDrawable = sRightOverscrollDrawable;
- }
+ if (Float.compare(mOverScrollAmount, r) != 0) {
+ mOverScrollAmount = r;
+ if (left && mForegroundDrawable != sLeftOverscrollDrawable) {
+ mForegroundDrawable = sLeftOverscrollDrawable;
+ } else if (!left && mForegroundDrawable != sRightOverscrollDrawable) {
+ mForegroundDrawable = sRightOverscrollDrawable;
+ }
- mForegroundAlpha = (int) Math.round((r * 255));
- mForegroundDrawable.setAlpha(mForegroundAlpha);
- invalidate();
+ mForegroundAlpha = (int) Math.round((r * 255));
+ mForegroundDrawable.setAlpha(mForegroundAlpha);
+ invalidate();
+ }
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
index 7d077e2..fd9362a 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
@@ -146,6 +146,9 @@ public class KeyguardWidgetPager extends PagedView {
v.setPivotY(pageHeight / 2.0f);
v.setPivotX(pageWidth / 2.0f);
v.setRotationY(0f);
+ if (v instanceof KeyguardWidgetFrame) {
+ ((KeyguardWidgetFrame) v).setOverScrollAmount(0, false);
+ }
}
}