Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d75c079 authored by Dan Sandler's avatar Dan Sandler Committed by Adrian Roos
Browse files

Shrink user profile bitmaps to 48dp^2.

Can save megabytes of memory.

Bug: 16371371
Change-Id: Ifec5cff3a3376d045ee4e3b605edeb8d9ac93799
parent 329a85ba
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -32,8 +32,8 @@
            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.UserSwitcher.UserName"
            />
    <com.android.systemui.statusbar.phone.UserAvatarView android:id="@+id/picture"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_width="@dimen/max_avatar_size"
            android:layout_height="@dimen/max_avatar_size"
            android:contentDescription="@null"
            sysui:frameWidth="@dimen/keyguard_user_switcher_border_thickness"
            sysui:activeFrameColor="@color/current_user_border_color" />
+2 −2
Original line number Diff line number Diff line
@@ -29,8 +29,8 @@

    <com.android.systemui.statusbar.phone.UserAvatarView
            android:id="@+id/user_picture"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_width="@dimen/max_avatar_size"
            android:layout_height="@dimen/max_avatar_size"
            android:layout_marginBottom="12dp"
            systemui:frameWidth="2dp"
            systemui:activeFrameColor="@color/current_user_border_color"/>
+4 −0
Original line number Diff line number Diff line
@@ -361,4 +361,8 @@

    <!-- Battery level padding end when in expanded QS (but not on Keyguard) -->
    <dimen name="battery_level_padding_end">4dp</dimen>

    <!-- Largest size an avatar might need to be drawn in the user picker, status bar, or
         quick settings header -->
    <dimen name="max_avatar_size">48dp</dimen>
</resources>
+52 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 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.systemui;

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;

public class BitmapHelper {
    /**
     * Generate a new bitmap (width x height pixels, ARGB_8888) with the input bitmap scaled
     * to fit and clipped to an inscribed circle.
     * @param input Bitmap to resize and clip
     * @param width Width of output bitmap (and diameter of circle)
     * @param height Height of output bitmap
     * @return A shiny new bitmap for you to use
     */
    public static Bitmap createCircularClip(Bitmap input, int width, int height) {
        final int inWidth = input.getWidth();
        final int inHeight = input.getHeight();
        final Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(output);
        final Paint paint = new Paint();
        paint.setShader(new BitmapShader(input, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        final RectF srcRect = new RectF(0, 0, inWidth, inHeight);
        final RectF dstRect = new RectF(0, 0, width, height);
        final Matrix m = new Matrix();
        m.setRectToRect(srcRect, dstRect, Matrix.ScaleToFit.CENTER);
        canvas.setMatrix(m);
        canvas.drawCircle(inWidth / 2, inHeight / 2, inWidth / 2, paint);
        return output;
    }
}
+7 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.policy;

import com.android.systemui.BitmapHelper;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.StatusBarHeaderView;
import com.android.systemui.statusbar.phone.UserAvatarView;
@@ -176,11 +177,16 @@ public class KeyguardUserSwitcher implements View.OnClickListener {
        } catch (RemoteException e) {
            Log.e(TAG, "Couln't get current user.", e);
        }
        final int avatarSize
                = mContext.getResources().getDimensionPixelSize(R.dimen.max_avatar_size);
        for (int i = 0; i < N; i++) {
            UserInfo user = users.get(i);
            if (user.supportsSwitchTo()) {
                boolean isCurrent = user.id == currentUser;
                result.add(new UserData(user, mUserManager.getUserIcon(user.id), isCurrent));
                final Bitmap picture = BitmapHelper.createCircularClip(
                        mUserManager.getUserIcon(user.id),
                        avatarSize, avatarSize);
                result.add(new UserData(user, picture, isCurrent));
            }
        }
        return result;
Loading