14538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi/*
24538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * Copyright (C) 2014 The Android Open Source Project
34538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi *
44538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
54538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * you may not use this file except in compliance with the License.
64538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * You may obtain a copy of the License at
74538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi *
84538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
94538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi *
104538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * Unless required by applicable law or agreed to in writing, software
114538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
124538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * See the License for the specific language governing permissions and
144538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * limitations under the License
154538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi */
164538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
174538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggipackage com.android.systemui.statusbar.phone;
184538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggiimport android.animation.LayoutTransition;
204538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.content.Context;
21e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggiimport android.content.res.Configuration;
224538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.graphics.drawable.Drawable;
234538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.util.AttributeSet;
24e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggiimport android.util.TypedValue;
254538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.view.View;
2698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggiimport android.view.ViewTreeObserver;
2798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggiimport android.view.animation.AnimationUtils;
2898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggiimport android.view.animation.Interpolator;
294538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.widget.ImageView;
304538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.widget.RelativeLayout;
314538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport android.widget.TextView;
324538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
33708f7721e910d2c1fe984d2b8a6bf10565a00a61Jorim Jaggiimport com.android.systemui.BatteryMeterView;
344538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport com.android.systemui.R;
354538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport com.android.systemui.statusbar.policy.BatteryController;
364538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
374538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggiimport com.android.systemui.statusbar.policy.UserInfoController;
384538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
3988d255107d266d5aaca66cfd9e502aa2b9faa9e6Elliott Hughesimport java.text.NumberFormat;
4088d255107d266d5aaca66cfd9e502aa2b9faa9e6Elliott Hughes
414538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi/**
424538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi * The header group on Keyguard.
434538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi */
444538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggipublic class KeyguardStatusBarView extends RelativeLayout
454538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        implements BatteryController.BatteryStateChangeCallback {
464538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
474538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private boolean mBatteryCharging;
484538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private boolean mKeyguardUserSwitcherShowing;
494538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private boolean mBatteryListening;
504538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
51e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi    private TextView mCarrierLabel;
524538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private View mSystemIconsSuperContainer;
534538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private MultiUserSwitch mMultiUserSwitch;
544538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private ImageView mMultiUserAvatar;
554538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private TextView mBatteryLevel;
564538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
574538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private BatteryController mBatteryController;
584538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private KeyguardUserSwitcher mKeyguardUserSwitcher;
594538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
604538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private int mSystemIconsSwitcherHiddenExpandedMargin;
6198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    private Interpolator mFastOutSlowInInterpolator;
624538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
634538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public KeyguardStatusBarView(Context context, AttributeSet attrs) {
644538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        super(context, attrs);
654538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
664538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
674538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    @Override
684538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    protected void onFinishInflate() {
694538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        super.onFinishInflate();
704538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mSystemIconsSuperContainer = findViewById(R.id.system_icons_super_container);
714538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserSwitch = (MultiUserSwitch) findViewById(R.id.multi_user_switch);
724538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserAvatar = (ImageView) findViewById(R.id.multi_user_avatar);
734538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mBatteryLevel = (TextView) findViewById(R.id.battery_level);
74e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi        mCarrierLabel = (TextView) findViewById(R.id.keyguard_carrier_text);
754538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        loadDimens();
7698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(getContext(),
7798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                android.R.interpolator.fast_out_slow_in);
784538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        updateUserSwitcher();
794538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
804538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
81e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi    @Override
82e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi    protected void onConfigurationChanged(Configuration newConfig) {
83e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi        super.onConfigurationChanged(newConfig);
84e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi
85e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi        // Respect font size setting.
86e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi        mCarrierLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
87e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi                getResources().getDimensionPixelSize(
88e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi                        com.android.internal.R.dimen.text_size_small_material));
89e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi        mBatteryLevel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
90e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi                getResources().getDimensionPixelSize(R.dimen.battery_level_text_size));
91e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi    }
92e210cc8e9463508381048a2af8b4c30a94239c32Jorim Jaggi
934538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private void loadDimens() {
944538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mSystemIconsSwitcherHiddenExpandedMargin = getResources().getDimensionPixelSize(
954538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi                R.dimen.system_icons_switcher_hidden_expanded_margin);
964538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
974538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
984538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private void updateVisibilities() {
9998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        if (mMultiUserSwitch.getParent() != this && !mKeyguardUserSwitcherShowing) {
10098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            if (mMultiUserSwitch.getParent() != null) {
10198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                getOverlay().remove(mMultiUserSwitch);
10298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            }
10398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            addView(mMultiUserSwitch, 0);
10498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        } else if (mMultiUserSwitch.getParent() == this && mKeyguardUserSwitcherShowing) {
10598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            removeView(mMultiUserSwitch);
10698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        }
1074538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mBatteryLevel.setVisibility(mBatteryCharging ? View.VISIBLE : View.GONE);
1084538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1094538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1104538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private void updateSystemIconsLayoutParams() {
1114538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        RelativeLayout.LayoutParams lp =
1124538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi                (LayoutParams) mSystemIconsSuperContainer.getLayoutParams();
1134538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        int marginEnd = mKeyguardUserSwitcherShowing ? mSystemIconsSwitcherHiddenExpandedMargin : 0;
1144538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        if (marginEnd != lp.getMarginEnd()) {
1154538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            lp.setMarginEnd(marginEnd);
1164538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            mSystemIconsSuperContainer.setLayoutParams(lp);
1174538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        }
1184538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1194538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1204538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void setListening(boolean listening) {
1214538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        if (listening == mBatteryListening) {
1224538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            return;
1234538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        }
1244538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mBatteryListening = listening;
1254538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        if (mBatteryListening) {
1264538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            mBatteryController.addStateChangedCallback(this);
1274538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        } else {
1284538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            mBatteryController.removeStateChangedCallback(this);
1294538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        }
1304538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1314538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1324538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    private void updateUserSwitcher() {
1334538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        boolean keyguardSwitcherAvailable = mKeyguardUserSwitcher != null;
1344538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserSwitch.setClickable(keyguardSwitcherAvailable);
1354538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserSwitch.setFocusable(keyguardSwitcherAvailable);
1364538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserSwitch.setKeyguardMode(keyguardSwitcherAvailable);
1374538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1384538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1394538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void setBatteryController(BatteryController batteryController) {
1404538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mBatteryController = batteryController;
141708f7721e910d2c1fe984d2b8a6bf10565a00a61Jorim Jaggi        ((BatteryMeterView) findViewById(R.id.battery)).setBatteryController(batteryController);
1424538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1434538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1444538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void setUserInfoController(UserInfoController userInfoController) {
1454538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        userInfoController.addListener(new UserInfoController.OnUserInfoChangedListener() {
1464538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            @Override
1474538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            public void onUserInfoChanged(String name, Drawable picture) {
1484538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi                mMultiUserAvatar.setImageDrawable(picture);
1494538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            }
1504538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        });
1514538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1524538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1534538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    @Override
1544538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
15588d255107d266d5aaca66cfd9e502aa2b9faa9e6Elliott Hughes        String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
15688d255107d266d5aaca66cfd9e502aa2b9faa9e6Elliott Hughes        mBatteryLevel.setText(percentage);
1574538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        boolean changed = mBatteryCharging != charging;
1584538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mBatteryCharging = charging;
1594538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        if (changed) {
1604538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi            updateVisibilities();
1614538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        }
1624538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1634538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1644538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    @Override
1654538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void onPowerSaveChanged() {
1664538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        // could not care less
1674538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1684538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
1694538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public void setKeyguardUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher) {
1704538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mKeyguardUserSwitcher = keyguardUserSwitcher;
1714538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mMultiUserSwitch.setKeyguardUserSwitcher(keyguardUserSwitcher);
1724538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        updateUserSwitcher();
1734538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1744538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
17598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    public void setKeyguardUserSwitcherShowing(boolean showing, boolean animate) {
1764538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        mKeyguardUserSwitcherShowing = showing;
17798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        if (animate) {
17898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            animateNextLayoutChange();
17998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        }
1804538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        updateVisibilities();
1814538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        updateSystemIconsLayoutParams();
1824538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
1834538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi
18498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    private void animateNextLayoutChange() {
18598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        final int systemIconsCurrentX = mSystemIconsSuperContainer.getLeft();
18698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        final boolean userSwitcherVisible = mMultiUserSwitch.getParent() == this;
18798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
18898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            @Override
18998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            public boolean onPreDraw() {
19098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                getViewTreeObserver().removeOnPreDrawListener(this);
19198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                boolean userSwitcherHiding = userSwitcherVisible
19298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        && mMultiUserSwitch.getParent() != KeyguardStatusBarView.this;
19398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                mSystemIconsSuperContainer.setX(systemIconsCurrentX);
19498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                mSystemIconsSuperContainer.animate()
19598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        .translationX(0)
19698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        .setDuration(400)
19798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        .setStartDelay(userSwitcherHiding ? 300 : 0)
19898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        .setInterpolator(mFastOutSlowInInterpolator)
19998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                        .start();
20098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                if (userSwitcherHiding) {
20198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                    getOverlay().add(mMultiUserSwitch);
20298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                    mMultiUserSwitch.animate()
20398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .alpha(0f)
20498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setDuration(300)
20598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setStartDelay(0)
20698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setInterpolator(PhoneStatusBar.ALPHA_OUT)
20798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .withEndAction(new Runnable() {
20898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                                @Override
20998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                                public void run() {
21098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                                    mMultiUserSwitch.setAlpha(1f);
21198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                                    getOverlay().remove(mMultiUserSwitch);
21298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                                }
21398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            })
21498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .start();
21598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi
21698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                } else {
21798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                    mMultiUserSwitch.setAlpha(0f);
21898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                    mMultiUserSwitch.animate()
21998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .alpha(1f)
22098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setDuration(300)
22198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setStartDelay(200)
22298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                            .setInterpolator(PhoneStatusBar.ALPHA_IN);
22398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                }
22498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi                return true;
22598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            }
22698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        });
22798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi
22898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    }
22998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi
23098f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    @Override
23198f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    public void setVisibility(int visibility) {
23298f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        super.setVisibility(visibility);
23398f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        if (visibility != View.VISIBLE) {
23498f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            mSystemIconsSuperContainer.animate().cancel();
23598f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            mMultiUserSwitch.animate().cancel();
23698f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi            mMultiUserSwitch.setAlpha(1f);
23798f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi        }
23898f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi    }
23998f8530af3bb8636b7b173443c90686c485205d6Jorim Jaggi
2404538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    @Override
2414538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    public boolean hasOverlappingRendering() {
2424538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi        return false;
2434538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi    }
2444538027dedbe7ebfc884ca35d20522a2a21a42d4Jorim Jaggi}
245