summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java184
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.kt157
2 files changed, 157 insertions, 184 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
deleted file mode 100644
index 7048a78f31fc..000000000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * 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.statusbar.phone;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.content.Context;
-import android.graphics.drawable.Icon;
-import android.os.UserHandle;
-
-import com.android.internal.statusbar.StatusBarIcon;
-import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState;
-import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconViewModel;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Wraps {@link com.android.internal.statusbar.StatusBarIcon} so we can still have a uniform list
- */
-public class StatusBarIconHolder {
- public static final int TYPE_ICON = 0;
- /**
- * TODO (b/249790733): address this once the new pipeline is in place
- * This type exists so that the new pipeline (see {@link MobileIconViewModel}) can be used
- * to inform the old view system about changes to the data set (the list of mobile icons). The
- * design of the new pipeline should allow for removal of this icon holder type, and obsolete
- * the need for this entire class.
- *
- * @deprecated This field only exists so the new status bar pipeline can interface with the
- * view holder system.
- */
- @Deprecated
- public static final int TYPE_MOBILE_NEW = 3;
-
- /**
- * TODO (b/238425913): address this once the new pipeline is in place
- * This type exists so that the new wifi pipeline can be used to inform the old view system
- * about the existence of the wifi icon. The design of the new pipeline should allow for removal
- * of this icon holder type, and obsolete the need for this entire class.
- *
- * @deprecated This field only exists so the new status bar pipeline can interface with the
- * view holder system.
- */
- @Deprecated
- public static final int TYPE_WIFI_NEW = 4;
-
- @IntDef({
- TYPE_ICON,
- TYPE_MOBILE_NEW,
- TYPE_WIFI_NEW
- })
- @Retention(RetentionPolicy.SOURCE)
- @interface IconType {}
-
- private StatusBarIcon mIcon;
- private @IconType int mType = TYPE_ICON;
- private int mTag = 0;
-
- /** Returns a human-readable string representing the given type. */
- public static String getTypeString(@IconType int type) {
- switch(type) {
- case TYPE_ICON: return "ICON";
- case TYPE_MOBILE_NEW: return "MOBILE_NEW";
- case TYPE_WIFI_NEW: return "WIFI_NEW";
- default: return "UNKNOWN";
- }
- }
-
- private StatusBarIconHolder() {
- }
-
- public static StatusBarIconHolder fromIcon(StatusBarIcon icon) {
- StatusBarIconHolder wrapper = new StatusBarIconHolder();
- wrapper.mIcon = icon;
-
- return wrapper;
- }
-
- /** Creates a new holder with for the new wifi icon. */
- public static StatusBarIconHolder forNewWifiIcon() {
- StatusBarIconHolder holder = new StatusBarIconHolder();
- holder.mType = TYPE_WIFI_NEW;
- return holder;
- }
-
- /**
- * ONLY for use with the new connectivity pipeline, where we only need a subscriptionID to
- * determine icon ordering and building the correct view model
- */
- public static StatusBarIconHolder fromSubIdForModernMobileIcon(int subId) {
- StatusBarIconHolder holder = new StatusBarIconHolder();
- holder.mType = TYPE_MOBILE_NEW;
- holder.mTag = subId;
-
- return holder;
- }
-
- /**
- * Creates a new StatusBarIconHolder from a CallIndicatorIconState.
- */
- public static StatusBarIconHolder fromCallIndicatorState(
- Context context,
- CallIndicatorIconState state) {
- StatusBarIconHolder holder = new StatusBarIconHolder();
- int resId = state.isNoCalling ? state.noCallingResId : state.callStrengthResId;
- String contentDescription = state.isNoCalling
- ? state.noCallingDescription : state.callStrengthDescription;
- holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(),
- Icon.createWithResource(context, resId), 0, 0, contentDescription);
- holder.mTag = state.subId;
- return holder;
- }
-
- public @IconType int getType() {
- return mType;
- }
-
- @Nullable
- public StatusBarIcon getIcon() {
- return mIcon;
- }
-
- public void setIcon(StatusBarIcon icon) {
- mIcon = icon;
- }
-
- public boolean isVisible() {
- switch (mType) {
- case TYPE_ICON:
- return mIcon.visible;
- case TYPE_MOBILE_NEW:
- case TYPE_WIFI_NEW:
- // The new pipeline controls visibilities via the view model and view binder, so
- // this is effectively an unused return value.
- return true;
- default:
- return true;
- }
- }
-
- public void setVisible(boolean visible) {
- if (isVisible() == visible) {
- return;
- }
-
- switch (mType) {
- case TYPE_ICON:
- mIcon.visible = visible;
- break;
-
- case TYPE_MOBILE_NEW:
- case TYPE_WIFI_NEW:
- // The new pipeline controls visibilities via the view model and view binder, so
- // ignore setVisible.
- break;
- }
- }
-
- public int getTag() {
- return mTag;
- }
-
- @Override
- public String toString() {
- return "StatusBarIconHolder(type=" + getTypeString(mType)
- + " tag=" + getTag()
- + " visible=" + isVisible() + ")";
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.kt
new file mode 100644
index 000000000000..5b55a1e73dc3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.kt
@@ -0,0 +1,157 @@
+/*
+ * 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.statusbar.phone
+
+import android.annotation.IntDef
+import android.content.Context
+import android.graphics.drawable.Icon
+import android.os.UserHandle
+import com.android.internal.statusbar.StatusBarIcon
+import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.CallIndicatorIconState
+
+/** Wraps [com.android.internal.statusbar.StatusBarIcon] so we can still have a uniform list */
+class StatusBarIconHolder private constructor() {
+ @IntDef(TYPE_ICON, TYPE_MOBILE_NEW, TYPE_WIFI_NEW)
+ @Retention(AnnotationRetention.SOURCE)
+ internal annotation class IconType
+
+ var icon: StatusBarIcon? = null
+
+ @IconType
+ var type = TYPE_ICON
+ private set
+
+ var tag = 0
+ private set
+
+ var isVisible: Boolean
+ get() =
+ when (type) {
+ TYPE_ICON -> icon!!.visible
+
+ // The new pipeline controls visibilities via the view model and
+ // view binder, so
+ // this is effectively an unused return value.
+ TYPE_MOBILE_NEW,
+ TYPE_WIFI_NEW -> true
+ else -> true
+ }
+ set(visible) {
+ if (isVisible == visible) {
+ return
+ }
+ when (type) {
+ TYPE_ICON -> icon!!.visible = visible
+ TYPE_MOBILE_NEW,
+ TYPE_WIFI_NEW -> {}
+ }
+ }
+
+ override fun toString(): String {
+ return ("StatusBarIconHolder(type=${getTypeString(type)}" +
+ " tag=$tag" +
+ " visible=$isVisible)")
+ }
+
+ companion object {
+ const val TYPE_ICON = 0
+
+ /**
+ * TODO (b/249790733): address this once the new pipeline is in place This type exists so
+ * that the new pipeline (see [MobileIconViewModel]) can be used to inform the old view
+ * system about changes to the data set (the list of mobile icons). The design of the new
+ * pipeline should allow for removal of this icon holder type, and obsolete the need for
+ * this entire class.
+ */
+ @Deprecated(
+ """This field only exists so the new status bar pipeline can interface with the
+ view holder system."""
+ )
+ const val TYPE_MOBILE_NEW = 3
+
+ /**
+ * TODO (b/238425913): address this once the new pipeline is in place This type exists so
+ * that the new wifi pipeline can be used to inform the old view system about the existence
+ * of the wifi icon. The design of the new pipeline should allow for removal of this icon
+ * holder type, and obsolete the need for this entire class.
+ */
+ @Deprecated(
+ """This field only exists so the new status bar pipeline can interface with the
+ view holder system."""
+ )
+ const val TYPE_WIFI_NEW = 4
+
+ /** Returns a human-readable string representing the given type. */
+ fun getTypeString(@IconType type: Int): String {
+ return when (type) {
+ TYPE_ICON -> "ICON"
+ TYPE_MOBILE_NEW -> "MOBILE_NEW"
+ TYPE_WIFI_NEW -> "WIFI_NEW"
+ else -> "UNKNOWN"
+ }
+ }
+
+ @JvmStatic
+ fun fromIcon(icon: StatusBarIcon?): StatusBarIconHolder {
+ val wrapper = StatusBarIconHolder()
+ wrapper.icon = icon
+ return wrapper
+ }
+
+ /** Creates a new holder with for the new wifi icon. */
+ @JvmStatic
+ fun forNewWifiIcon(): StatusBarIconHolder {
+ val holder = StatusBarIconHolder()
+ holder.type = TYPE_WIFI_NEW
+ return holder
+ }
+
+ /**
+ * ONLY for use with the new connectivity pipeline, where we only need a subscriptionID to
+ * determine icon ordering and building the correct view model
+ */
+ @JvmStatic
+ fun fromSubIdForModernMobileIcon(subId: Int): StatusBarIconHolder {
+ val holder = StatusBarIconHolder()
+ holder.type = TYPE_MOBILE_NEW
+ holder.tag = subId
+ return holder
+ }
+
+ /** Creates a new StatusBarIconHolder from a CallIndicatorIconState. */
+ @JvmStatic
+ fun fromCallIndicatorState(
+ context: Context,
+ state: CallIndicatorIconState,
+ ): StatusBarIconHolder {
+ val holder = StatusBarIconHolder()
+ val resId = if (state.isNoCalling) state.noCallingResId else state.callStrengthResId
+ val contentDescription =
+ if (state.isNoCalling) state.noCallingDescription else state.callStrengthDescription
+ holder.icon =
+ StatusBarIcon(
+ UserHandle.SYSTEM,
+ context.packageName,
+ Icon.createWithResource(context, resId),
+ 0,
+ 0,
+ contentDescription,
+ )
+ holder.tag = state.subId
+ return holder
+ }
+ }
+}