CarQSFooter.java revision cade22539536823695e4b75f77dcb54ecce72ba2
1b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis/*
2b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * Copyright (C) 2017 The Android Open Source Project
3b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis *
4b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * except in compliance with the License. You may obtain a copy of the License at
6b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis *
7b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis *      http://www.apache.org/licenses/LICENSE-2.0
8b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis *
9b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * Unless required by applicable law or agreed to in writing, software distributed under the
10b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * KIND, either express or implied. See the License for the specific language governing
12b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * permissions and limitations under the License.
13b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis */
14b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwispackage com.android.systemui.qs.car;
15b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
16b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.content.Context;
17b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.content.Intent;
18b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.graphics.drawable.Drawable;
19b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.support.annotation.Nullable;
20b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.util.AttributeSet;
21b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.util.Log;
22b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.view.View;
23b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.widget.ImageView;
24b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.widget.RelativeLayout;
25b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport android.widget.TextView;
26b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
27b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.Dependency;
28b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.R;
29b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.plugins.ActivityStarter;
30b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.qs.QSFooter;
31b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.qs.QSPanel;
32b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.statusbar.car.UserGridView;
33b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.statusbar.phone.MultiUserSwitch;
34b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.statusbar.policy.DeviceProvisionedController;
35b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwisimport com.android.systemui.statusbar.policy.UserInfoController;
36b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
37b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis/**
38b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * The footer view that displays below the status bar in the auto use-case. This view shows the
39b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis * user switcher and access to settings.
40b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis */
41b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwispublic class CarQSFooter extends RelativeLayout implements QSFooter,
42b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        UserInfoController.OnUserInfoChangedListener {
43b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private static final String TAG = "CarQSFooter";
44b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
45b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private UserInfoController mUserInfoController;
46b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
47b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private MultiUserSwitch mMultiUserSwitch;
48b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private TextView mUserName;
49b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private ImageView mMultiUserAvatar;
50b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    private UserGridView mUserGridView;
51b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
52b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    public CarQSFooter(Context context, AttributeSet attrs) {
53b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis        super(context, attrs);
54b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    }
55b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis
56b21cb5fa7d4e820d470a4dc5a80544e0e0965c86Martin v. Löwis    @Override
57    protected void onFinishInflate() {
58        super.onFinishInflate();
59        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
60        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
61        mUserName = findViewById(R.id.user_name);
62
63        mUserInfoController = Dependency.get(UserInfoController.class);
64
65        mMultiUserSwitch.setOnClickListener(v -> {
66            if (mUserGridView == null) {
67                Log.e(TAG, "CarQSFooter not properly set up; cannot display user switcher.");
68                return;
69            }
70
71            if (!mUserGridView.isShowing()) {
72                mUserGridView.show();
73            } else {
74                mUserGridView.hide();
75            }
76        });
77
78        findViewById(R.id.settings_button).setOnClickListener(v -> {
79            ActivityStarter activityStarter = Dependency.get(ActivityStarter.class);
80
81            if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
82                // If user isn't setup just unlock the device and dump them back at SUW.
83                activityStarter.postQSRunnableDismissingKeyguard(() -> { });
84                return;
85            }
86
87            activityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
88                    true /* dismissShade */);
89        });
90    }
91
92    @Override
93    public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
94        mMultiUserAvatar.setImageDrawable(picture);
95        mUserName.setText(name);
96    }
97
98    @Override
99    public void setQSPanel(@Nullable QSPanel panel) {
100        if (panel != null) {
101            mMultiUserSwitch.setQsPanel(panel);
102        }
103    }
104
105    public void setUserGridView(UserGridView view) {
106        mUserGridView = view;
107    }
108
109    @Override
110    public void setListening(boolean listening) {
111        if (listening) {
112            mUserInfoController.addCallback(this);
113        } else {
114            mUserInfoController.removeCallback(this);
115        }
116    }
117
118    @Nullable
119    @Override
120    public View getExpandView() {
121        // No view that should expand/collapse the quick settings.
122        return null;
123    }
124
125    @Override
126    public void setExpanded(boolean expanded) {
127        // Do nothing because the quick settings cannot be expanded.
128    }
129
130    @Override
131    public void setExpansion(float expansion) {
132        // Do nothing because the quick settings cannot be expanded.
133    }
134
135    @Override
136    public void setKeyguardShowing(boolean keyguardShowing) {
137        // Do nothing because the footer will not be shown when the keyguard is up.
138    }
139}
140