Loading packages/SystemUI/src/com/android/systemui/qs/QSFooter.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +4 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * 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()); } } Loading
packages/SystemUI/src/com/android/systemui/qs/QSFooter.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +4 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading
packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterTest.java 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * 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()); } }