Skip to content
Snippets Groups Projects
Commit ab0af704 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Add RefactorFlagUtils and an example usage

Fixes: 303809202
Test: atest SystemUITests
Change-Id: Id2a5e113d76032496a654f3e9c2dee5c0a7e3a21
parent 21c63a92
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,6 @@
package com.android.systemui.flags
import android.util.Log
import com.android.systemui.Dependency
/**
......@@ -65,8 +64,7 @@ private constructor(
* }
* ````
*/
fun assertInLegacyMode() =
check(!isEnabled) { "Legacy code path not supported when $flagName is enabled." }
fun assertInLegacyMode() = RefactorFlagUtils.assertInLegacyMode(isEnabled, flagName)
/**
* Called to ensure code is only run when the flag is enabled. This protects users from the
......@@ -81,13 +79,8 @@ private constructor(
* }
* ```
*/
fun isUnexpectedlyInLegacyMode(): Boolean {
if (!isEnabled) {
val message = "New code path expects $flagName to be enabled."
Log.wtf(TAG, message, Exception(message))
}
return !isEnabled
}
fun isUnexpectedlyInLegacyMode(): Boolean =
RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, flagName)
companion object {
private const val TAG = "RefactorFlag"
......
/*
* Copyright (C) 2023 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.flags
import android.util.Log
/**
* Utilities for writing your own objects to uphold refactor flag conventions.
*
* Example usage:
* ```
* object SomeRefactor {
* const val FLAG_NAME = Flags.SOME_REFACTOR
* @JvmStatic inline val isEnabled get() = Flags.someRefactor()
* @JvmStatic inline fun isUnexpectedlyInLegacyMode() =
* RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, FLAG_NAME)
* @JvmStatic inline fun assertInLegacyMode() =
* RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME)
* }
* ```
*/
@Suppress("NOTHING_TO_INLINE")
object RefactorFlagUtils {
/**
* Called to ensure code is only run when the flag is enabled. This protects users from the
* unintended behaviors caused by accidentally running new logic, while also crashing on an eng
* build to ensure that the refactor author catches issues in testing.
*
* Example usage:
* ```
* public void setNewController(SomeController someController) {
* if (SomeRefactor.isUnexpectedlyInLegacyMode()) return;
* mSomeController = someController;
* }
* ```
*/
inline fun isUnexpectedlyInLegacyMode(isEnabled: Boolean, flagName: Any): Boolean {
val inLegacyMode = !isEnabled
if (inLegacyMode) {
val message = "New code path expects $flagName to be enabled."
Log.wtf("RefactorFlag", message, IllegalStateException(message))
}
return inLegacyMode
}
/**
* Called to ensure code is only run when the flag is disabled. This will throw an exception if
* the flag is enabled to ensure that the refactor author catches issues in testing.
*
* Example usage:
* ```
* public void setSomeLegacyController(SomeController someController) {
* SomeRefactor.assertInLegacyMode();
* mSomeController = someController;
* }
* ````
*/
inline fun assertInLegacyMode(isEnabled: Boolean, flagName: Any) =
check(!isEnabled) { "Legacy code path not supported when $flagName is enabled." }
}
/*
* Copyright (C) 2023 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.statusbar.notification.footer.shared
import com.android.systemui.Flags
import com.android.systemui.flags.RefactorFlagUtils
/** Helper for reading or using the FooterView refactor flag state. */
@Suppress("NOTHING_TO_INLINE")
object FooterViewRefactor {
const val FLAG_NAME = Flags.FLAG_NOTIFICATIONS_FOOTER_VIEW_REFACTOR
/** Is the refactor enabled */
@JvmStatic
inline val isEnabled
get() = Flags.notificationsFooterViewRefactor()
/**
* Called to ensure code is only run when the flag is enabled. This protects users from the
* unintended behaviors caused by accidentally running new logic, while also crashing on an eng
* build to ensure that the refactor author catches issues in testing.
*/
@JvmStatic
inline fun isUnexpectedlyInLegacyMode() =
RefactorFlagUtils.isUnexpectedlyInLegacyMode(isEnabled, FLAG_NAME)
/**
* Called to ensure code is only run when the flag is disabled. This will throw an exception if
* the flag is enabled to ensure that the refactor author catches issues in testing.
*/
@JvmStatic
inline fun assertInLegacyMode() = RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment