blob: ba55f2ddcf13196643b3390583b4dc9b8e50daec [file] [log] [blame]
Adrian Roos8ddb2da2014-06-16 18:56:22 -07001/*
2 * Copyright (C) 2014 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
17package com.android.systemui.statusbar.phone;
18
Adrian Roos8ddb2da2014-06-16 18:56:22 -070019import android.content.Context;
Evan Roskyaa7f51f2016-03-16 13:15:53 -070020import android.content.res.ColorStateList;
Adrian Roos8ddb2da2014-06-16 18:56:22 -070021import android.content.res.TypedArray;
22import android.graphics.Bitmap;
Adrian Roos8ddb2da2014-06-16 18:56:22 -070023import android.graphics.drawable.Drawable;
24import android.util.AttributeSet;
25import android.view.View;
26
Evan Roskyaa7f51f2016-03-16 13:15:53 -070027import com.android.settingslib.drawable.UserIconDrawable;
Winsonc0d70582016-01-29 10:24:39 -080028import com.android.systemui.R;
29
Adrian Roos8ddb2da2014-06-16 18:56:22 -070030/**
Evan Roskyaa7f51f2016-03-16 13:15:53 -070031 * A view that displays a user image cropped to a circle with an optional frame.
Adrian Roos8ddb2da2014-06-16 18:56:22 -070032 */
33public class UserAvatarView extends View {
34
Evan Roskyaa7f51f2016-03-16 13:15:53 -070035 private final UserIconDrawable mDrawable = new UserIconDrawable();
Adrian Roos8ddb2da2014-06-16 18:56:22 -070036
37 public UserAvatarView(Context context, AttributeSet attrs,
38 int defStyleAttr,
39 int defStyleRes) {
40 super(context, attrs, defStyleAttr, defStyleRes);
Evan Roskyaa7f51f2016-03-16 13:15:53 -070041
Adrian Roos8ddb2da2014-06-16 18:56:22 -070042 final TypedArray a = context.obtainStyledAttributes(
43 attrs, R.styleable.UserAvatarView, defStyleAttr, defStyleRes);
44 final int N = a.getIndexCount();
45 for (int i = 0; i < N; i++) {
46 int attr = a.getIndex(i);
Jason Monk05dd5672018-08-09 09:38:21 -040047 if (attr == R.styleable.UserAvatarView_avatarPadding) {
48 setAvatarPadding(a.getDimension(attr, 0));
49 } else if (attr == R.styleable.UserAvatarView_frameWidth) {
50 setFrameWidth(a.getDimension(attr, 0));
51 } else if (attr == R.styleable.UserAvatarView_framePadding) {
52 setFramePadding(a.getDimension(attr, 0));
53 } else if (attr == R.styleable.UserAvatarView_frameColor) {
54 setFrameColor(a.getColorStateList(attr));
55 } else if (attr == R.styleable.UserAvatarView_badgeDiameter) {
56 setBadgeDiameter(a.getDimension(attr, 0));
57 } else if (attr == R.styleable.UserAvatarView_badgeMargin) {
58 setBadgeMargin(a.getDimension(attr, 0));
Adrian Roos8ddb2da2014-06-16 18:56:22 -070059 }
60 }
61 a.recycle();
Evan Roskyaa7f51f2016-03-16 13:15:53 -070062 setBackground(mDrawable);
Adrian Roos8ddb2da2014-06-16 18:56:22 -070063 }
64
65 public UserAvatarView(Context context, AttributeSet attrs, int defStyleAttr) {
66 this(context, attrs, defStyleAttr, 0);
67 }
68
69 public UserAvatarView(Context context, AttributeSet attrs) {
70 this(context, attrs, 0);
71 }
72
73 public UserAvatarView(Context context) {
74 this(context, null);
75 }
76
Evan Roskyaa7f51f2016-03-16 13:15:53 -070077 /**
78 * @deprecated use {@link #setAvatar(Bitmap)} instead.
79 */
80 @Deprecated
Adrian Roos8ddb2da2014-06-16 18:56:22 -070081 public void setBitmap(Bitmap bitmap) {
Evan Roskyaa7f51f2016-03-16 13:15:53 -070082 setAvatar(bitmap);
Adrian Roos8ddb2da2014-06-16 18:56:22 -070083 }
84
Evan Roskyaa7f51f2016-03-16 13:15:53 -070085 public void setFrameColor(ColorStateList color) {
86 mDrawable.setFrameColor(color);
Adrian Roos8ddb2da2014-06-16 18:56:22 -070087 }
88
89 public void setFrameWidth(float frameWidth) {
Evan Roskyaa7f51f2016-03-16 13:15:53 -070090 mDrawable.setFrameWidth(frameWidth);
Adrian Roos8ddb2da2014-06-16 18:56:22 -070091 }
92
Adrian Roosccdff622014-08-06 00:07:18 +020093 public void setFramePadding(float framePadding) {
Evan Roskyaa7f51f2016-03-16 13:15:53 -070094 mDrawable.setFramePadding(framePadding);
Adrian Roosccdff622014-08-06 00:07:18 +020095 }
96
Evan Roskyaa7f51f2016-03-16 13:15:53 -070097 public void setAvatarPadding(float avatarPadding) {
98 mDrawable.setPadding(avatarPadding);
Adrian Roos8ddb2da2014-06-16 18:56:22 -070099 }
100
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700101 public void setBadgeDiameter(float diameter) {
102 mDrawable.setBadgeRadius(diameter * 0.5f);
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700103 }
104
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700105 public void setBadgeMargin(float margin) {
106 mDrawable.setBadgeMargin(margin);
107 }
108
109 public void setAvatar(Bitmap avatar) {
110 mDrawable.setIcon(avatar);
111 mDrawable.setBadge(null);
112 }
113
114 public void setAvatarWithBadge(Bitmap avatar, int userId) {
115 mDrawable.setIcon(avatar);
116 mDrawable.setBadgeIfManagedUser(getContext(), userId);
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700117 }
118
119 public void setDrawable(Drawable d) {
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700120 if (d instanceof UserIconDrawable) {
121 throw new RuntimeException("Recursively adding UserIconDrawable");
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700122 }
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700123 mDrawable.setIconDrawable(d);
124 mDrawable.setBadge(null);
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700125 }
126
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700127 public void setDrawableWithBadge(Drawable d, int userId) {
128 if (d instanceof UserIconDrawable) {
129 throw new RuntimeException("Recursively adding UserIconDrawable");
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700130 }
Evan Roskyaa7f51f2016-03-16 13:15:53 -0700131 mDrawable.setIconDrawable(d);
132 mDrawable.setBadgeIfManagedUser(getContext(), userId);
Sudheer Shanka1c7cda82015-12-31 14:46:02 +0000133 }
Adrian Roos8ddb2da2014-06-16 18:56:22 -0700134}