Add a test to verify lifecycle events are triggered
- Added a footer in feature flags, displaying "Experimental" during onStart. - Ui test to verify the text shows correctly. Change-Id: Ibf4f79cb3c12e460384e83201a16005a18d6437d Fixes: 78887450 Test: atest
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 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.settings.development.featureflags;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
|
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||||
|
import com.android.settingslib.widget.FooterPreferenceMixin;
|
||||||
|
|
||||||
|
public class FeatureFlagFooterPreferenceController extends BasePreferenceController
|
||||||
|
implements LifecycleObserver, OnStart {
|
||||||
|
|
||||||
|
private FooterPreferenceMixin mFooterMixin;
|
||||||
|
|
||||||
|
public FeatureFlagFooterPreferenceController(Context context) {
|
||||||
|
super(context, "feature_flag_footer_pref");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFooterMixin(FooterPreferenceMixin mixin) {
|
||||||
|
mFooterMixin = mixin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
mFooterMixin.createFooterPreference()
|
||||||
|
.setTitle(R.string.experimental_category_title);
|
||||||
|
}
|
||||||
|
}
|
@@ -22,6 +22,7 @@ import com.android.internal.logging.nano.MetricsProto;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -45,6 +46,12 @@ public class FeatureFlagsDashboard extends DashboardFragment {
|
|||||||
return R.xml.feature_flags_settings;
|
return R.xml.feature_flags_settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
use(FeatureFlagFooterPreferenceController.class).setFooterMixin(mFooterPreferenceMixin);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getHelpResource() {
|
public int getHelpResource() {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -53,7 +60,12 @@ public class FeatureFlagsDashboard extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new FeatureFlagsPreferenceController(context, getLifecycle()));
|
final Lifecycle lifecycle = getLifecycle();
|
||||||
|
final FeatureFlagFooterPreferenceController footerController =
|
||||||
|
new FeatureFlagFooterPreferenceController(context);
|
||||||
|
controllers.add(new FeatureFlagsPreferenceController(context, lifecycle));
|
||||||
|
controllers.add(footerController);
|
||||||
|
lifecycle.addObserver(footerController);
|
||||||
return controllers;
|
return controllers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 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.settings.core;
|
||||||
|
|
||||||
|
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.platform.test.annotations.Presubmit;
|
||||||
|
import android.support.test.InstrumentationRegistry;
|
||||||
|
import android.support.test.filters.SmallTest;
|
||||||
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
import android.support.test.uiautomator.By;
|
||||||
|
import android.support.test.uiautomator.Direction;
|
||||||
|
import android.support.test.uiautomator.UiDevice;
|
||||||
|
import android.support.test.uiautomator.UiObject2;
|
||||||
|
import android.support.test.uiautomator.Until;
|
||||||
|
|
||||||
|
import com.android.settings.development.featureflags.FeatureFlagsDashboard;
|
||||||
|
import com.android.settingslib.core.instrumentation.Instrumentable;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
@SmallTest
|
||||||
|
public class LifecycleEventHandlingTest {
|
||||||
|
|
||||||
|
private static final long TIMEOUT = 2000;
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
private String mTargetPackage;
|
||||||
|
private UiDevice mDevice;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
|
||||||
|
mContext = InstrumentationRegistry.getTargetContext();
|
||||||
|
mTargetPackage = mContext.getPackageName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Presubmit
|
||||||
|
public void launchDashboard_shouldSeeFooter() {
|
||||||
|
new SubSettingLauncher(mContext)
|
||||||
|
.setDestination(FeatureFlagsDashboard.class.getName())
|
||||||
|
.setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
|
||||||
|
.addFlags(FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
.launch();
|
||||||
|
|
||||||
|
final String footerText = "Experimental";
|
||||||
|
// Scroll to bottom
|
||||||
|
final UiObject2 view = mDevice.wait(
|
||||||
|
Until.findObject(By.res(mTargetPackage, "main_content")),
|
||||||
|
TIMEOUT);
|
||||||
|
view.scroll(Direction.DOWN, 100f);
|
||||||
|
|
||||||
|
assertThat(mDevice.wait(Until.findObject(By.text(footerText)), TIMEOUT))
|
||||||
|
.isNotNull();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user