Don't allow settings launch when user isn't setup

Test: runtest systemui
Change-Id: Ia0c90f981b9d45e8e3e8c09771d4baa8ab9fabff
Fixes: 31737292
This commit is contained in:
Jason Monk
2017-03-27 11:17:04 -04:00
parent a56d9a1841
commit 7d596d522c
3 changed files with 77 additions and 0 deletions

View File

@@ -49,6 +49,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;
@@ -336,6 +337,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);

View File

@@ -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() {

View File

@@ -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());
}
}