Merge "Add falsing check to MultiUserSwitch" into sc-dev
This commit is contained in:
@@ -195,10 +195,10 @@ public class QSFooterView extends FrameLayout {
|
|||||||
mExpandClickListener = onClickListener;
|
mExpandClickListener = onClickListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setExpanded(boolean expanded, boolean isTunerEnabled) {
|
void setExpanded(boolean expanded, boolean isTunerEnabled, boolean multiUserEnabled) {
|
||||||
if (mExpanded == expanded) return;
|
if (mExpanded == expanded) return;
|
||||||
mExpanded = expanded;
|
mExpanded = expanded;
|
||||||
updateEverything(isTunerEnabled);
|
updateEverything(isTunerEnabled, multiUserEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@@ -251,16 +251,16 @@ public class QSFooterView extends FrameLayout {
|
|||||||
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
|
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void disable(int state2, boolean isTunerEnabled) {
|
void disable(int state2, boolean isTunerEnabled, boolean multiUserEnabled) {
|
||||||
final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
|
final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
|
||||||
if (disabled == mQsDisabled) return;
|
if (disabled == mQsDisabled) return;
|
||||||
mQsDisabled = disabled;
|
mQsDisabled = disabled;
|
||||||
updateEverything(isTunerEnabled);
|
updateEverything(isTunerEnabled, multiUserEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateEverything(boolean isTunerEnabled) {
|
void updateEverything(boolean isTunerEnabled, boolean multiUserEnabled) {
|
||||||
post(() -> {
|
post(() -> {
|
||||||
updateVisibilities(isTunerEnabled);
|
updateVisibilities(isTunerEnabled, multiUserEnabled);
|
||||||
updateClickabilities();
|
updateClickabilities();
|
||||||
setClickable(false);
|
setClickable(false);
|
||||||
});
|
});
|
||||||
@@ -273,18 +273,19 @@ public class QSFooterView extends FrameLayout {
|
|||||||
mBuildText.setLongClickable(mBuildText.getVisibility() == View.VISIBLE);
|
mBuildText.setLongClickable(mBuildText.getVisibility() == View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateVisibilities(boolean isTunerEnabled) {
|
private void updateVisibilities(boolean isTunerEnabled, boolean multiUserEnabled) {
|
||||||
mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
|
mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
|
||||||
mTunerIcon.setVisibility(isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
|
mTunerIcon.setVisibility(isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
|
||||||
final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
|
final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
|
||||||
mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.GONE);
|
mMultiUserSwitch.setVisibility(
|
||||||
|
showUserSwitcher(multiUserEnabled) ? View.VISIBLE : View.GONE);
|
||||||
mSettingsButton.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
|
mSettingsButton.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
|
||||||
|
|
||||||
mBuildText.setVisibility(mExpanded && mShouldShowBuildText ? View.VISIBLE : View.INVISIBLE);
|
mBuildText.setVisibility(mExpanded && mShouldShowBuildText ? View.VISIBLE : View.INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean showUserSwitcher() {
|
private boolean showUserSwitcher(boolean multiUserEnabled) {
|
||||||
return mExpanded && mMultiUserSwitch.isMultiUserEnabled();
|
return mExpanded && multiUserEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void onUserInfoChanged(Drawable picture, boolean isGuestUser) {
|
void onUserInfoChanged(Drawable picture, boolean isGuestUser) {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import com.android.systemui.plugins.ActivityStarter;
|
|||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
import com.android.systemui.qs.dagger.QSScope;
|
import com.android.systemui.qs.dagger.QSScope;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.statusbar.phone.MultiUserSwitch;
|
import com.android.systemui.statusbar.phone.MultiUserSwitchController;
|
||||||
import com.android.systemui.statusbar.phone.SettingsButton;
|
import com.android.systemui.statusbar.phone.SettingsButton;
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||||
@@ -60,16 +60,15 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
private final DeviceProvisionedController mDeviceProvisionedController;
|
private final DeviceProvisionedController mDeviceProvisionedController;
|
||||||
private final UserTracker mUserTracker;
|
private final UserTracker mUserTracker;
|
||||||
private final QSPanelController mQsPanelController;
|
private final QSPanelController mQsPanelController;
|
||||||
private final QSDetailDisplayer mQsDetailDisplayer;
|
|
||||||
private final QuickQSPanelController mQuickQSPanelController;
|
private final QuickQSPanelController mQuickQSPanelController;
|
||||||
private final TunerService mTunerService;
|
private final TunerService mTunerService;
|
||||||
private final MetricsLogger mMetricsLogger;
|
private final MetricsLogger mMetricsLogger;
|
||||||
private final FalsingManager mFalsingManager;
|
private final FalsingManager mFalsingManager;
|
||||||
|
private final MultiUserSwitchController mMultiUserSwitchController;
|
||||||
private final SettingsButton mSettingsButton;
|
private final SettingsButton mSettingsButton;
|
||||||
private final View mSettingsButtonContainer;
|
private final View mSettingsButtonContainer;
|
||||||
private final TextView mBuildText;
|
private final TextView mBuildText;
|
||||||
private final View mEdit;
|
private final View mEdit;
|
||||||
private final MultiUserSwitch mMultiUserSwitch;
|
|
||||||
private final PageIndicator mPageIndicator;
|
private final PageIndicator mPageIndicator;
|
||||||
private final View mPowerMenuLite;
|
private final View mPowerMenuLite;
|
||||||
private final boolean mShowPMLiteButton;
|
private final boolean mShowPMLiteButton;
|
||||||
@@ -135,7 +134,8 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
QSFooterViewController(QSFooterView view, UserManager userManager,
|
QSFooterViewController(QSFooterView view, UserManager userManager,
|
||||||
UserInfoController userInfoController, ActivityStarter activityStarter,
|
UserInfoController userInfoController, ActivityStarter activityStarter,
|
||||||
DeviceProvisionedController deviceProvisionedController, UserTracker userTracker,
|
DeviceProvisionedController deviceProvisionedController, UserTracker userTracker,
|
||||||
QSPanelController qsPanelController, QSDetailDisplayer qsDetailDisplayer,
|
QSPanelController qsPanelController,
|
||||||
|
MultiUserSwitchController multiUserSwitchController,
|
||||||
QuickQSPanelController quickQSPanelController,
|
QuickQSPanelController quickQSPanelController,
|
||||||
TunerService tunerService, MetricsLogger metricsLogger, FalsingManager falsingManager,
|
TunerService tunerService, MetricsLogger metricsLogger, FalsingManager falsingManager,
|
||||||
@Named(PM_LITE_ENABLED) boolean showPMLiteButton,
|
@Named(PM_LITE_ENABLED) boolean showPMLiteButton,
|
||||||
@@ -147,23 +147,28 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
mDeviceProvisionedController = deviceProvisionedController;
|
mDeviceProvisionedController = deviceProvisionedController;
|
||||||
mUserTracker = userTracker;
|
mUserTracker = userTracker;
|
||||||
mQsPanelController = qsPanelController;
|
mQsPanelController = qsPanelController;
|
||||||
mQsDetailDisplayer = qsDetailDisplayer;
|
|
||||||
mQuickQSPanelController = quickQSPanelController;
|
mQuickQSPanelController = quickQSPanelController;
|
||||||
mTunerService = tunerService;
|
mTunerService = tunerService;
|
||||||
mMetricsLogger = metricsLogger;
|
mMetricsLogger = metricsLogger;
|
||||||
mFalsingManager = falsingManager;
|
mFalsingManager = falsingManager;
|
||||||
|
mMultiUserSwitchController = multiUserSwitchController;
|
||||||
|
|
||||||
mSettingsButton = mView.findViewById(R.id.settings_button);
|
mSettingsButton = mView.findViewById(R.id.settings_button);
|
||||||
mSettingsButtonContainer = mView.findViewById(R.id.settings_button_container);
|
mSettingsButtonContainer = mView.findViewById(R.id.settings_button_container);
|
||||||
mBuildText = mView.findViewById(R.id.build);
|
mBuildText = mView.findViewById(R.id.build);
|
||||||
mEdit = mView.findViewById(android.R.id.edit);
|
mEdit = mView.findViewById(android.R.id.edit);
|
||||||
mMultiUserSwitch = mView.findViewById(R.id.multi_user_switch);
|
|
||||||
mPageIndicator = mView.findViewById(R.id.footer_page_indicator);
|
mPageIndicator = mView.findViewById(R.id.footer_page_indicator);
|
||||||
mPowerMenuLite = mView.findViewById(R.id.pm_lite);
|
mPowerMenuLite = mView.findViewById(R.id.pm_lite);
|
||||||
mShowPMLiteButton = showPMLiteButton;
|
mShowPMLiteButton = showPMLiteButton;
|
||||||
mGlobalActionsDialog = globalActionsDialog;
|
mGlobalActionsDialog = globalActionsDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
mMultiUserSwitchController.init();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewAttached() {
|
protected void onViewAttached() {
|
||||||
if (mShowPMLiteButton) {
|
if (mShowPMLiteButton) {
|
||||||
@@ -199,9 +204,8 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
mQsPanelController.showEdit(view));
|
mQsPanelController.showEdit(view));
|
||||||
});
|
});
|
||||||
|
|
||||||
mMultiUserSwitch.setQSDetailDisplayer(mQsDetailDisplayer);
|
|
||||||
mQsPanelController.setFooterPageIndicator(mPageIndicator);
|
mQsPanelController.setFooterPageIndicator(mPageIndicator);
|
||||||
mView.updateEverything(isTunerEnabled());
|
mView.updateEverything(isTunerEnabled(), mMultiUserSwitchController.isMultiUserEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -217,10 +221,10 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
@Override
|
@Override
|
||||||
public void setExpanded(boolean expanded) {
|
public void setExpanded(boolean expanded) {
|
||||||
mExpanded = expanded;
|
mExpanded = expanded;
|
||||||
mView.setExpanded(expanded, isTunerEnabled());
|
mView.setExpanded(
|
||||||
|
expanded, isTunerEnabled(), mMultiUserSwitchController.isMultiUserEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getHeight() {
|
public int getHeight() {
|
||||||
return mView.getHeight();
|
return mView.getHeight();
|
||||||
@@ -258,7 +262,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disable(int state1, int state2, boolean animate) {
|
public void disable(int state1, int state2, boolean animate) {
|
||||||
mView.disable(state2, isTunerEnabled());
|
mView.disable(state2, isTunerEnabled(), mMultiUserSwitchController.isMultiUserEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startSettingsActivity() {
|
private void startSettingsActivity() {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import com.android.systemui.qs.QSPanel;
|
|||||||
import com.android.systemui.qs.QuickQSPanel;
|
import com.android.systemui.qs.QuickQSPanel;
|
||||||
import com.android.systemui.qs.QuickStatusBarHeader;
|
import com.android.systemui.qs.QuickStatusBarHeader;
|
||||||
import com.android.systemui.qs.customize.QSCustomizer;
|
import com.android.systemui.qs.customize.QSCustomizer;
|
||||||
|
import com.android.systemui.statusbar.phone.MultiUserSwitch;
|
||||||
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -72,6 +73,12 @@ public interface QSFragmentModule {
|
|||||||
return qsFragment.getView();
|
return qsFragment.getView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
static MultiUserSwitch providesMultiUserSWitch(QSFooterView qsFooterView) {
|
||||||
|
return qsFooterView.findViewById(R.id.multi_user_switch);
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
static QSPanel provideQSPanel(@RootView View view) {
|
static QSPanel provideQSPanel(@RootView View view) {
|
||||||
|
|||||||
@@ -16,127 +16,25 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
import static com.android.systemui.DejankUtils.whitelistIpcs;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserManager;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import com.android.systemui.Dependency;
|
|
||||||
import com.android.systemui.Prefs;
|
|
||||||
import com.android.systemui.Prefs.Key;
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
|
||||||
import com.android.systemui.qs.QSDetailDisplayer;
|
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Container for image of the multi user switcher (tappable).
|
* Container for image of the multi user switcher (tappable).
|
||||||
*/
|
*/
|
||||||
public class MultiUserSwitch extends FrameLayout implements View.OnClickListener {
|
public class MultiUserSwitch extends FrameLayout {
|
||||||
|
|
||||||
protected QSDetailDisplayer mQSDetailDisplayer;
|
|
||||||
private UserSwitcherController.BaseUserAdapter mUserListener;
|
|
||||||
|
|
||||||
final UserManager mUserManager;
|
|
||||||
|
|
||||||
|
|
||||||
protected UserSwitcherController mUserSwitcherController;
|
|
||||||
|
|
||||||
public MultiUserSwitch(Context context, AttributeSet attrs) {
|
public MultiUserSwitch(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
mUserManager = UserManager.get(getContext());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
void refreshContentDescription(String currentUser) {
|
||||||
protected void onFinishInflate() {
|
|
||||||
super.onFinishInflate();
|
|
||||||
setOnClickListener(this);
|
|
||||||
refreshContentDescription();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public void setQSDetailDisplayer(QSDetailDisplayer detailDisplayer) {
|
|
||||||
mQSDetailDisplayer = detailDisplayer;
|
|
||||||
setUserSwitcherController(Dependency.get(UserSwitcherController.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasMultipleUsers() {
|
|
||||||
if (mUserListener == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return mUserListener.getUserCount() != 0
|
|
||||||
&& Prefs.getBoolean(getContext(), Key.SEEN_MULTI_USER, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserSwitcherController(UserSwitcherController userSwitcherController) {
|
|
||||||
mUserSwitcherController = userSwitcherController;
|
|
||||||
registerListener();
|
|
||||||
refreshContentDescription();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMultiUserEnabled() {
|
|
||||||
// TODO(b/138661450) Move IPC calls to background
|
|
||||||
return whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled(
|
|
||||||
mContext.getResources().getBoolean(R.bool.qs_show_user_switcher_for_single_user)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerListener() {
|
|
||||||
if (mUserManager.isUserSwitcherEnabled() && mUserListener == null) {
|
|
||||||
|
|
||||||
final UserSwitcherController controller = mUserSwitcherController;
|
|
||||||
if (controller != null) {
|
|
||||||
mUserListener = new UserSwitcherController.BaseUserAdapter(controller) {
|
|
||||||
@Override
|
|
||||||
public void notifyDataSetChanged() {
|
|
||||||
refreshContentDescription();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
refreshContentDescription();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mQSDetailDisplayer != null && mUserSwitcherController != null) {
|
|
||||||
View center = getChildCount() > 0 ? getChildAt(0) : this;
|
|
||||||
|
|
||||||
int[] tmpInt = new int[2];
|
|
||||||
center.getLocationInWindow(tmpInt);
|
|
||||||
tmpInt[0] += center.getWidth() / 2;
|
|
||||||
tmpInt[1] += center.getHeight() / 2;
|
|
||||||
|
|
||||||
mQSDetailDisplayer.showDetailAdapter(getUserDetailAdapter(), tmpInt[0], tmpInt[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setClickable(boolean clickable) {
|
|
||||||
super.setClickable(clickable);
|
|
||||||
refreshContentDescription();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshContentDescription() {
|
|
||||||
String currentUser = null;
|
|
||||||
// TODO(b/138661450)
|
|
||||||
if (whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled())
|
|
||||||
&& mUserSwitcherController != null) {
|
|
||||||
currentUser = mUserSwitcherController.getCurrentUserName(mContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
String text = null;
|
String text = null;
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(currentUser)) {
|
if (!TextUtils.isEmpty(currentUser)) {
|
||||||
@@ -166,8 +64,4 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener
|
|||||||
public boolean hasOverlappingRendering() {
|
public boolean hasOverlappingRendering() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DetailAdapter getUserDetailAdapter() {
|
|
||||||
return mUserSwitcherController.mUserDetailAdapter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 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.statusbar.phone;
|
||||||
|
|
||||||
|
import static com.android.systemui.DejankUtils.whitelistIpcs;
|
||||||
|
|
||||||
|
import android.os.UserManager;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
|
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||||
|
import com.android.systemui.qs.QSDetailDisplayer;
|
||||||
|
import com.android.systemui.qs.dagger.QSScope;
|
||||||
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
|
import com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
/** View Controller for {@link MultiUserSwitch}. */
|
||||||
|
@QSScope
|
||||||
|
public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
|
||||||
|
private final UserManager mUserManager;
|
||||||
|
private final UserSwitcherController mUserSwitcherController;
|
||||||
|
private final QSDetailDisplayer mQsDetailDisplayer;
|
||||||
|
private final FalsingManager mFalsingManager;
|
||||||
|
|
||||||
|
private UserSwitcherController.BaseUserAdapter mUserListener;
|
||||||
|
|
||||||
|
private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
View center = mView.getChildCount() > 0 ? mView.getChildAt(0) : mView;
|
||||||
|
|
||||||
|
int[] tmpInt = new int[2];
|
||||||
|
center.getLocationInWindow(tmpInt);
|
||||||
|
tmpInt[0] += center.getWidth() / 2;
|
||||||
|
tmpInt[1] += center.getHeight() / 2;
|
||||||
|
|
||||||
|
mQsDetailDisplayer.showDetailAdapter(getUserDetailAdapter(), tmpInt[0], tmpInt[1]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public MultiUserSwitchController(MultiUserSwitch view, UserManager userManager,
|
||||||
|
UserSwitcherController userSwitcherController, QSDetailDisplayer qsDetailDisplayer,
|
||||||
|
FalsingManager falsingManager) {
|
||||||
|
super(view);
|
||||||
|
mUserManager = userManager;
|
||||||
|
mUserSwitcherController = userSwitcherController;
|
||||||
|
mQsDetailDisplayer = qsDetailDisplayer;
|
||||||
|
mFalsingManager = falsingManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onInit() {
|
||||||
|
registerListener();
|
||||||
|
mView.refreshContentDescription(getCurrentUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onViewAttached() {
|
||||||
|
mView.setOnClickListener(mOnClickListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onViewDetached() {
|
||||||
|
mView.setOnClickListener(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DetailAdapter getUserDetailAdapter() {
|
||||||
|
return mUserSwitcherController.mUserDetailAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerListener() {
|
||||||
|
if (mUserManager.isUserSwitcherEnabled() && mUserListener == null) {
|
||||||
|
|
||||||
|
final UserSwitcherController controller = mUserSwitcherController;
|
||||||
|
if (controller != null) {
|
||||||
|
mUserListener = new UserSwitcherController.BaseUserAdapter(controller) {
|
||||||
|
@Override
|
||||||
|
public void notifyDataSetChanged() {
|
||||||
|
mView.refreshContentDescription(getCurrentUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mView.refreshContentDescription(getCurrentUser());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getCurrentUser() {
|
||||||
|
// TODO(b/138661450)
|
||||||
|
if (whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled())) {
|
||||||
|
return mUserSwitcherController.getCurrentUserName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns true if view should be made visible. */
|
||||||
|
public boolean isMultiUserEnabled() {
|
||||||
|
// TODO(b/138661450) Move IPC calls to background
|
||||||
|
return whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled(
|
||||||
|
getResources().getBoolean(R.bool.qs_show_user_switcher_for_single_user)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -577,11 +577,13 @@ public class UserSwitcherController implements Dumpable {
|
|||||||
pw.println("mSimpleUserSwitcher=" + mSimpleUserSwitcher);
|
pw.println("mSimpleUserSwitcher=" + mSimpleUserSwitcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentUserName(Context context) {
|
/** Returns the name of the current user of the phone. */
|
||||||
|
public String getCurrentUserName() {
|
||||||
if (mUsers.isEmpty()) return null;
|
if (mUsers.isEmpty()) return null;
|
||||||
UserRecord item = mUsers.get(0);
|
UserRecord item = mUsers.get(0);
|
||||||
if (item == null || item.info == null) return null;
|
if (item == null || item.info == null) return null;
|
||||||
if (item.isGuest) return context.getString(com.android.settingslib.R.string.guest_nickname);
|
if (item.isGuest) return mContext.getString(
|
||||||
|
com.android.settingslib.R.string.guest_nickname);
|
||||||
return item.info.name;
|
return item.info.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import com.android.systemui.classifier.FalsingManagerFake;
|
|||||||
import com.android.systemui.globalactions.GlobalActionsDialogLite;
|
import com.android.systemui.globalactions.GlobalActionsDialogLite;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.statusbar.phone.MultiUserSwitch;
|
import com.android.systemui.statusbar.phone.MultiUserSwitchController;
|
||||||
import com.android.systemui.statusbar.phone.SettingsButton;
|
import com.android.systemui.statusbar.phone.SettingsButton;
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||||
import com.android.systemui.statusbar.policy.UserInfoController;
|
import com.android.systemui.statusbar.policy.UserInfoController;
|
||||||
@@ -90,7 +90,7 @@ public class QSFooterViewControllerTest extends LeakCheckedTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private View mEdit;
|
private View mEdit;
|
||||||
@Mock
|
@Mock
|
||||||
private MultiUserSwitch mMultiUserSwitch;
|
private MultiUserSwitchController mMultiUserSwitchController;
|
||||||
@Mock
|
@Mock
|
||||||
private View mPowerMenuLiteView;
|
private View mPowerMenuLiteView;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -116,12 +116,11 @@ public class QSFooterViewControllerTest extends LeakCheckedTest {
|
|||||||
when(mView.findViewById(R.id.settings_button)).thenReturn(mSettingsButton);
|
when(mView.findViewById(R.id.settings_button)).thenReturn(mSettingsButton);
|
||||||
when(mView.findViewById(R.id.build)).thenReturn(mBuildText);
|
when(mView.findViewById(R.id.build)).thenReturn(mBuildText);
|
||||||
when(mView.findViewById(android.R.id.edit)).thenReturn(mEdit);
|
when(mView.findViewById(android.R.id.edit)).thenReturn(mEdit);
|
||||||
when(mView.findViewById(R.id.multi_user_switch)).thenReturn(mMultiUserSwitch);
|
|
||||||
when(mView.findViewById(R.id.pm_lite)).thenReturn(mPowerMenuLiteView);
|
when(mView.findViewById(R.id.pm_lite)).thenReturn(mPowerMenuLiteView);
|
||||||
|
|
||||||
mController = new QSFooterViewController(mView, mUserManager, mUserInfoController,
|
mController = new QSFooterViewController(mView, mUserManager, mUserInfoController,
|
||||||
mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController,
|
mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController,
|
||||||
new QSDetailDisplayer(), mQuickQSPanelController, mFakeTunerService,
|
mMultiUserSwitchController, mQuickQSPanelController, mFakeTunerService,
|
||||||
mMetricsLogger, new FalsingManagerFake(), false, mGlobalActionsDialog);
|
mMetricsLogger, new FalsingManagerFake(), false, mGlobalActionsDialog);
|
||||||
|
|
||||||
mController.init();
|
mController.init();
|
||||||
|
|||||||
Reference in New Issue
Block a user