/* * Copyright (C) 2021 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.os.Parcel import android.os.Parcelable interface Flag : Parcelable { val id: Int val default: T val resourceOverride: Int override fun describeContents() = 0 fun hasResourceOverride(): Boolean { return resourceOverride != -1 } } // Consider using the "parcelize" kotlin library. data class BooleanFlag @JvmOverloads constructor( override val id: Int, override val default: Boolean = false, override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = BooleanFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readBoolean() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeBoolean(default) } } data class StringFlag @JvmOverloads constructor( override val id: Int, override val default: String = "", override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = StringFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readString() ?: "" ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeString(default) } } data class IntFlag @JvmOverloads constructor( override val id: Int, override val default: Int = 0, override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = IntFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readInt() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeInt(default) } } data class LongFlag @JvmOverloads constructor( override val id: Int, override val default: Long = 0, override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = LongFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readLong() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeLong(default) } } data class FloatFlag @JvmOverloads constructor( override val id: Int, override val default: Float = 0f, override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = FloatFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readFloat() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeFloat(default) } } data class DoubleFlag @JvmOverloads constructor( override val id: Int, override val default: Double = 0.0, override val resourceOverride: Int = -1 ) : Flag { companion object { @JvmField val CREATOR = object : Parcelable.Creator { override fun createFromParcel(parcel: Parcel) = DoubleFlag(parcel) override fun newArray(size: Int) = arrayOfNulls(size) } } private constructor(parcel: Parcel) : this( id = parcel.readInt(), default = parcel.readDouble() ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(id) parcel.writeDouble(default) } }