diff options
| author | 2023-07-13 20:31:19 +0000 | |
|---|---|---|
| committer | 2023-07-13 20:31:19 +0000 | |
| commit | 78e6bd966148d95fe56c7bdfe8d981ce11c8e316 (patch) | |
| tree | dc040b0acf27d9501b3355eea362054c9dfcddc4 | |
| parent | a2d30c87a8f30702889237a5089fe2bcdf241435 (diff) | |
| parent | 37027b38cf7a1846732664ca7a4a8060d545cff5 (diff) | |
Merge "Removing AutomaticBrightnessStrategy refs in DPC2" into udc-qpr-dev
7 files changed, 173 insertions, 46 deletions
diff --git a/services/core/java/com/android/server/display/DisplayBrightnessState.java b/services/core/java/com/android/server/display/DisplayBrightnessState.java index e27182fe3ea7..dd5afa2bdc39 100644 --- a/services/core/java/com/android/server/display/DisplayBrightnessState.java +++ b/services/core/java/com/android/server/display/DisplayBrightnessState.java @@ -16,6 +16,8 @@ package com.android.server.display; +import android.text.TextUtils; + import com.android.server.display.brightness.BrightnessReason; import java.util.Objects; @@ -29,12 +31,14 @@ public final class DisplayBrightnessState { private final float mSdrBrightness; private final BrightnessReason mBrightnessReason; private final String mDisplayBrightnessStrategyName; + private final boolean mShouldUseAutoBrightness; private DisplayBrightnessState(Builder builder) { - this.mBrightness = builder.getBrightness(); - this.mSdrBrightness = builder.getSdrBrightness(); - this.mBrightnessReason = builder.getBrightnessReason(); - this.mDisplayBrightnessStrategyName = builder.getDisplayBrightnessStrategyName(); + mBrightness = builder.getBrightness(); + mSdrBrightness = builder.getSdrBrightness(); + mBrightnessReason = builder.getBrightnessReason(); + mDisplayBrightnessStrategyName = builder.getDisplayBrightnessStrategyName(); + mShouldUseAutoBrightness = builder.getShouldUseAutoBrightness(); } /** @@ -66,6 +70,13 @@ public final class DisplayBrightnessState { return mDisplayBrightnessStrategyName; } + /** + * @return {@code true} if the device is set up to run auto-brightness. + */ + public boolean getShouldUseAutoBrightness() { + return mShouldUseAutoBrightness; + } + @Override public String toString() { StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:"); @@ -75,6 +86,8 @@ public final class DisplayBrightnessState { stringBuilder.append(getSdrBrightness()); stringBuilder.append("\n brightnessReason:"); stringBuilder.append(getBrightnessReason()); + stringBuilder.append("\n shouldUseAutoBrightness:"); + stringBuilder.append(getShouldUseAutoBrightness()); return stringBuilder.toString(); } @@ -91,28 +104,20 @@ public final class DisplayBrightnessState { return false; } - DisplayBrightnessState - displayBrightnessState = (DisplayBrightnessState) other; + DisplayBrightnessState otherState = (DisplayBrightnessState) other; - if (mBrightness != displayBrightnessState.getBrightness()) { - return false; - } - if (mSdrBrightness != displayBrightnessState.getSdrBrightness()) { - return false; - } - if (!mBrightnessReason.equals(displayBrightnessState.getBrightnessReason())) { - return false; - } - if (!mDisplayBrightnessStrategyName.equals( - displayBrightnessState.getDisplayBrightnessStrategyName())) { - return false; - } - return true; + return mBrightness == otherState.getBrightness() + && mSdrBrightness == otherState.getSdrBrightness() + && mBrightnessReason.equals(otherState.getBrightnessReason()) + && TextUtils.equals(mDisplayBrightnessStrategyName, + otherState.getDisplayBrightnessStrategyName()) + && mShouldUseAutoBrightness == otherState.getShouldUseAutoBrightness(); } @Override public int hashCode() { - return Objects.hash(mBrightness, mSdrBrightness, mBrightnessReason); + return Objects.hash( + mBrightness, mSdrBrightness, mBrightnessReason, mShouldUseAutoBrightness); } /** @@ -123,6 +128,23 @@ public final class DisplayBrightnessState { private float mSdrBrightness; private BrightnessReason mBrightnessReason = new BrightnessReason(); private String mDisplayBrightnessStrategyName; + private boolean mShouldUseAutoBrightness; + + /** + * Create a builder starting with the values from the specified {@link + * DisplayBrightnessState}. + * + * @param state The state from which to initialize. + */ + public static Builder from(DisplayBrightnessState state) { + Builder builder = new Builder(); + builder.setBrightness(state.getBrightness()); + builder.setSdrBrightness(state.getSdrBrightness()); + builder.setBrightnessReason(state.getBrightnessReason()); + builder.setDisplayBrightnessStrategyName(state.getDisplayBrightnessStrategyName()); + builder.setShouldUseAutoBrightness(state.getShouldUseAutoBrightness()); + return builder; + } /** * Gets the brightness @@ -200,6 +222,21 @@ public final class DisplayBrightnessState { } /** + * See {@link DisplayBrightnessState#getShouldUseAutoBrightness}. + */ + public Builder setShouldUseAutoBrightness(boolean shouldUseAutoBrightness) { + this.mShouldUseAutoBrightness = shouldUseAutoBrightness; + return this; + } + + /** + * See {@link DisplayBrightnessState#getShouldUseAutoBrightness}. + */ + public boolean getShouldUseAutoBrightness() { + return mShouldUseAutoBrightness; + } + + /** * This is used to construct an immutable DisplayBrightnessState object from its builder */ public DisplayBrightnessState build() { diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 1061fab51398..7417aeb22a64 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -495,7 +495,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal mWakelockController, mDisplayDeviceConfig, mHandler.getLooper(), () -> updatePowerState(), mDisplayId, mSensorManager); mDisplayStateController = new DisplayStateController(mDisplayPowerProximityStateController); - mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy(context, mDisplayId); mTag = "DisplayPowerController2[" + mDisplayId + "]"; mThermalBrightnessThrottlingDataId = logicalDisplay.getDisplayInfoLocked().thermalBrightnessThrottlingDataId; @@ -566,6 +565,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal )); // Seed the cached brightness saveBrightnessInfo(getScreenBrightnessSetting()); + mAutomaticBrightnessStrategy = + mDisplayBrightnessController.getAutomaticBrightnessStrategy(); DisplayWhiteBalanceSettings displayWhiteBalanceSettings = null; DisplayWhiteBalanceController displayWhiteBalanceController = null; @@ -609,7 +610,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal setUpAutoBrightness(resources, handler); - mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic(); + mColorFadeEnabled = mInjector.isColorFadeEnabled(); mColorFadeFadesConfig = resources.getBoolean( R.bool.config_animateScreenLights); @@ -1272,14 +1273,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal int state = mDisplayStateController .updateDisplayState(mPowerRequest, mIsEnabled, mIsInTransition); - if (mScreenOffBrightnessSensorController != null) { - mScreenOffBrightnessSensorController - .setLightSensorEnabled(mAutomaticBrightnessStrategy.shouldUseAutoBrightness() - && mIsEnabled && (state == Display.STATE_OFF || (state == Display.STATE_DOZE - && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig())) - && mLeadDisplayId == Layout.NO_LEAD_DISPLAY); - } - // Initialize things the first time the power state is changed. if (mustInitialize) { initialize(readyToUpdateDisplayState() ? state : Display.STATE_UNKNOWN); @@ -1305,6 +1298,17 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal slowChange = mBrightnessToFollowSlowChange; } + // Set up the ScreenOff controller used when coming out of SCREEN_OFF and the ALS sensor + // doesn't yet have a valid lux value to use with auto-brightness. + if (mScreenOffBrightnessSensorController != null) { + mScreenOffBrightnessSensorController + .setLightSensorEnabled(displayBrightnessState.getShouldUseAutoBrightness() + && mIsEnabled && (state == Display.STATE_OFF + || (state == Display.STATE_DOZE + && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig())) + && mLeadDisplayId == Layout.NO_LEAD_DISPLAY); + } + // Take note if the short term model was already active before applying the current // request changes. final boolean wasShortTermModelActive = @@ -1580,7 +1584,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange, wasShortTermModelActive, mAutomaticBrightnessStrategy.isAutoBrightnessEnabled(), - brightnessIsTemporary); + brightnessIsTemporary, displayBrightnessState.getShouldUseAutoBrightness()); // We save the brightness info *after* the brightness setting has been changed and // adjustments made so that the brightness info reflects the latest value. @@ -1624,8 +1628,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal mTempBrightnessEvent.setWasShortTermModelActive(wasShortTermModelActive); mTempBrightnessEvent.setDisplayBrightnessStrategyName(displayBrightnessState .getDisplayBrightnessStrategyName()); - mTempBrightnessEvent.setAutomaticBrightnessEnabled(mAutomaticBrightnessStrategy - .shouldUseAutoBrightness()); + mTempBrightnessEvent.setAutomaticBrightnessEnabled( + displayBrightnessState.getShouldUseAutoBrightness()); // Temporary is what we use during slider interactions. We avoid logging those so that // we don't spam logcat when the slider is being used. boolean tempToTempTransition = @@ -2236,7 +2240,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated, boolean wasShortTermModelActive, boolean autobrightnessEnabled, - boolean brightnessIsTemporary) { + boolean brightnessIsTemporary, boolean shouldUseAutoBrightness) { final float brightnessInNits = mDisplayBrightnessController.convertToAdjustedNits(brightness); @@ -2251,7 +2255,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal || mAutomaticBrightnessController.isInIdleMode() || !autobrightnessEnabled || mBrightnessTracker == null - || !mAutomaticBrightnessStrategy.shouldUseAutoBrightness() + || !shouldUseAutoBrightness || brightnessInNits < 0.0f) { return; } @@ -2938,6 +2942,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal displayUniqueId, brightnessMin, brightnessMax, hbmData, hdrBrightnessCfg, hbmChangeCallback, hbmMetadata, context); } + + boolean isColorFadeEnabled() { + return !ActivityManager.isLowRamDeviceStatic(); + } } static class CachedBrightnessInfo { diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java index 2f52b708dfb5..ffd62a387a64 100644 --- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java +++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java @@ -29,6 +29,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.display.AutomaticBrightnessController; import com.android.server.display.BrightnessSetting; import com.android.server.display.DisplayBrightnessState; +import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy; import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; import java.io.PrintWriter; @@ -134,11 +135,21 @@ public final class DisplayBrightnessController { public DisplayBrightnessState updateBrightness( DisplayManagerInternal.DisplayPowerRequest displayPowerRequest, int targetDisplayState) { + + DisplayBrightnessState state; synchronized (mLock) { mDisplayBrightnessStrategy = mDisplayBrightnessStrategySelector.selectStrategy( displayPowerRequest, targetDisplayState); - return mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest); + state = mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest); + } + + // This is a temporary measure until AutomaticBrightnessStrategy works as a traditional + // strategy. + // TODO: Remove when AutomaticBrightnessStrategy is populating the values directly. + if (state != null) { + state = addAutomaticBrightnessState(state); } + return state; } /** @@ -322,6 +333,13 @@ public final class DisplayBrightnessController { } /** + * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy. + */ + public AutomaticBrightnessStrategy getAutomaticBrightnessStrategy() { + return mDisplayBrightnessStrategySelector.getAutomaticBrightnessStrategy(); + } + + /** * Convert a brightness float scale value to a nit value. Adjustments, such as RBC, are not * applied. This is used when storing the brightness in nits for the default display and when * passing the brightness value to follower displays. @@ -425,6 +443,18 @@ public final class DisplayBrightnessController { } } + /** + * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy. + */ + private DisplayBrightnessState addAutomaticBrightnessState(DisplayBrightnessState state) { + AutomaticBrightnessStrategy autoStrat = getAutomaticBrightnessStrategy(); + + DisplayBrightnessState.Builder builder = DisplayBrightnessState.Builder.from(state); + builder.setShouldUseAutoBrightness( + autoStrat != null && autoStrat.shouldUseAutoBrightness()); + return builder.build(); + } + @GuardedBy("mLock") private void setTemporaryBrightnessLocked(float temporaryBrightness) { mDisplayBrightnessStrategySelector.getTemporaryDisplayBrightnessStrategy() diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java index 02ca2d33fc99..45f1be076508 100644 --- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java @@ -25,6 +25,7 @@ import android.view.Display; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; +import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy; import com.android.server.display.brightness.strategy.BoostBrightnessStrategy; import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; import com.android.server.display.brightness.strategy.DozeBrightnessStrategy; @@ -60,6 +61,8 @@ public class DisplayBrightnessStrategySelector { private final FollowerBrightnessStrategy mFollowerBrightnessStrategy; // The brightness strategy used to manage the brightness state when the request is invalid. private final InvalidBrightnessStrategy mInvalidBrightnessStrategy; + // Controls brightness when automatic (adaptive) brightness is running. + private final AutomaticBrightnessStrategy mAutomaticBrightnessStrategy; // We take note of the old brightness strategy so that we can know when the strategy changes. private String mOldBrightnessStrategyName; @@ -81,6 +84,7 @@ public class DisplayBrightnessStrategySelector { mBoostBrightnessStrategy = injector.getBoostBrightnessStrategy(); mFollowerBrightnessStrategy = injector.getFollowerBrightnessStrategy(displayId); mInvalidBrightnessStrategy = injector.getInvalidBrightnessStrategy(); + mAutomaticBrightnessStrategy = injector.getAutomaticBrightnessStrategy(context, displayId); mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean( R.bool.config_allowAutoBrightnessWhileDozing); mOldBrightnessStrategyName = mInvalidBrightnessStrategy.getName(); @@ -130,6 +134,10 @@ public class DisplayBrightnessStrategySelector { return mFollowerBrightnessStrategy; } + public AutomaticBrightnessStrategy getAutomaticBrightnessStrategy() { + return mAutomaticBrightnessStrategy; + } + /** * Returns a boolean flag indicating if the light sensor is to be used to decide the screen * brightness when dozing @@ -198,5 +206,9 @@ public class DisplayBrightnessStrategySelector { InvalidBrightnessStrategy getInvalidBrightnessStrategy() { return new InvalidBrightnessStrategy(); } + + AutomaticBrightnessStrategy getAutomaticBrightnessStrategy(Context context, int displayId) { + return new AutomaticBrightnessStrategy(context, displayId); + } } } diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java index a9e616d766c6..8497dabba67d 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java @@ -18,17 +18,23 @@ package com.android.server.display.brightness; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.content.ContentResolver; import android.content.Context; +import android.content.ContextWrapper; import android.content.res.Resources; import android.hardware.display.DisplayManagerInternal; import android.view.Display; +import androidx.test.core.app.ApplicationProvider; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; +import com.android.internal.util.test.FakeSettingsProvider; +import com.android.internal.util.test.FakeSettingsProviderRule; import com.android.server.display.brightness.strategy.BoostBrightnessStrategy; import com.android.server.display.brightness.strategy.DozeBrightnessStrategy; import com.android.server.display.brightness.strategy.FollowerBrightnessStrategy; @@ -38,6 +44,7 @@ import com.android.server.display.brightness.strategy.ScreenOffBrightnessStrateg import com.android.server.display.brightness.strategy.TemporaryBrightnessStrategy; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -64,15 +71,20 @@ public final class DisplayBrightnessStrategySelectorTest { @Mock private FollowerBrightnessStrategy mFollowerBrightnessStrategy; @Mock - private Context mContext; - @Mock private Resources mResources; private DisplayBrightnessStrategySelector mDisplayBrightnessStrategySelector; + private Context mContext; + + @Rule + public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule(); @Before public void before() { MockitoAnnotations.initMocks(this); + mContext = spy(new ContextWrapper(ApplicationProvider.getApplicationContext())); + ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContext); + when(mContext.getContentResolver()).thenReturn(contentResolver); when(mContext.getResources()).thenReturn(mResources); when(mInvalidBrightnessStrategy.getName()).thenReturn("InvalidBrightnessStrategy"); DisplayBrightnessStrategySelector.Injector injector = diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java index 50996d7199c8..95c62aeec19a 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayBrightnessStateTest.java @@ -43,25 +43,50 @@ public class DisplayBrightnessStateTest { public void validateAllDisplayBrightnessStateFieldsAreSetAsExpected() { float brightness = 0.3f; float sdrBrightness = 0.2f; + boolean shouldUseAutoBrightness = true; BrightnessReason brightnessReason = new BrightnessReason(); brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC); brightnessReason.setModifier(BrightnessReason.MODIFIER_DIMMED); - DisplayBrightnessState displayBrightnessState = - mDisplayBrightnessStateBuilder.setBrightness(brightness).setSdrBrightness( - sdrBrightness).setBrightnessReason(brightnessReason).build(); + DisplayBrightnessState displayBrightnessState = mDisplayBrightnessStateBuilder + .setBrightness(brightness) + .setSdrBrightness(sdrBrightness) + .setBrightnessReason(brightnessReason) + .setShouldUseAutoBrightness(shouldUseAutoBrightness) + .build(); assertEquals(displayBrightnessState.getBrightness(), brightness, FLOAT_DELTA); assertEquals(displayBrightnessState.getSdrBrightness(), sdrBrightness, FLOAT_DELTA); assertEquals(displayBrightnessState.getBrightnessReason(), brightnessReason); + assertEquals(displayBrightnessState.getShouldUseAutoBrightness(), shouldUseAutoBrightness); assertEquals(displayBrightnessState.toString(), getString(displayBrightnessState)); } + @Test + public void testFrom() { + BrightnessReason reason = new BrightnessReason(); + reason.setReason(BrightnessReason.REASON_MANUAL); + reason.setModifier(BrightnessReason.MODIFIER_DIMMED); + DisplayBrightnessState state1 = new DisplayBrightnessState.Builder() + .setBrightnessReason(reason) + .setBrightness(0.26f) + .setSdrBrightness(0.23f) + .setShouldUseAutoBrightness(false) + .build(); + DisplayBrightnessState state2 = DisplayBrightnessState.Builder.from(state1).build(); + assertEquals(state1, state2); + } + private String getString(DisplayBrightnessState displayBrightnessState) { StringBuilder sb = new StringBuilder(); - sb.append("DisplayBrightnessState:"); - sb.append("\n brightness:" + displayBrightnessState.getBrightness()); - sb.append("\n sdrBrightness:" + displayBrightnessState.getSdrBrightness()); - sb.append("\n brightnessReason:" + displayBrightnessState.getBrightnessReason()); + sb.append("DisplayBrightnessState:") + .append("\n brightness:") + .append(displayBrightnessState.getBrightness()) + .append("\n sdrBrightness:") + .append(displayBrightnessState.getSdrBrightness()) + .append("\n brightnessReason:") + .append(displayBrightnessState.getBrightnessReason()) + .append("\n shouldUseAutoBrightness:") + .append(displayBrightnessState.getShouldUseAutoBrightness()); return sb.toString(); } } diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java index aaab4033d579..c710d1c3885d 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java @@ -714,6 +714,8 @@ public final class DisplayPowerController2Test { Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_OFF); + DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_OFF; mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); @@ -751,6 +753,7 @@ public final class DisplayPowerController2Test { Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_DOZE); DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_DOZE; mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); |