Don't allow settings launch when user isn't setup
Test: runtest systemui
Change-Id: Ia0c90f981b9d45e8e3e8c09771d4baa8ab9fabff
Fixes: 31737292
(cherry picked from commit 7d596d522c)
This commit is contained in:
@@ -51,6 +51,7 @@ import com.android.systemui.qs.TouchAnimator.Builder;
|
||||
import com.android.systemui.statusbar.phone.ExpandableIndicator;
|
||||
import com.android.systemui.statusbar.phone.MultiUserSwitch;
|
||||
import com.android.systemui.statusbar.phone.SettingsButton;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.NetworkController;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
|
||||
@@ -337,6 +338,11 @@ public class QSFooter extends LinearLayout implements
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == mSettingsButton) {
|
||||
if (!Dependency.get(DeviceProvisionedController.class).isCurrentUserSetup()) {
|
||||
// If user isn't setup just unlock the device and dump them back at SUW.
|
||||
mActivityStarter.postQSRunnableDismissingKeyguard(() -> { });
|
||||
return;
|
||||
}
|
||||
MetricsLogger.action(mContext,
|
||||
mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
|
||||
: MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
|
||||
|
||||
@@ -24,6 +24,10 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr
|
||||
boolean isUserSetup(int currentUser);
|
||||
int getCurrentUser();
|
||||
|
||||
default boolean isCurrentUserSetup() {
|
||||
return isUserSetup(getCurrentUser());
|
||||
}
|
||||
|
||||
interface DeviceProvisionedListener {
|
||||
default void onDeviceProvisionedChanged() { }
|
||||
default void onUserSwitched() {
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.qs;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.R.id;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@RunWithLooper
|
||||
public class QSFooterTest extends LeakCheckedTest {
|
||||
|
||||
private QSFooter mFooter;
|
||||
private ActivityStarter mActivityStarter;
|
||||
private DeviceProvisionedController mDeviceProvisionedController;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
|
||||
mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
|
||||
mDeviceProvisionedController = mDependency.injectMockDependency(
|
||||
DeviceProvisionedController.class);
|
||||
TestableLooper.get(this).runWithLooper(() -> {
|
||||
mFooter = (QSFooter) LayoutInflater.from(mContext).inflate(R.layout.qs_footer, null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSettings_UserNotSetup() {
|
||||
View settingsButton = mFooter.findViewById(id.settings_button);
|
||||
when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(false);
|
||||
|
||||
mFooter.onClick(settingsButton);
|
||||
// Verify Settings wasn't launched.
|
||||
verify(mActivityStarter, never()).startActivity(any(), anyBoolean());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user