/* * Copyright (C) 2020 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 android.media.metrics; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; /** * Media network event. */ public final class NetworkEvent extends Event implements Parcelable { /** Network type is not known. Default type. */ public static final int NETWORK_TYPE_UNKNOWN = 0; /** Other network type */ public static final int NETWORK_TYPE_OTHER = 1; /** Wi-Fi network */ public static final int NETWORK_TYPE_WIFI = 2; /** Ethernet network */ public static final int NETWORK_TYPE_ETHERNET = 3; /** 2G network */ public static final int NETWORK_TYPE_2G = 4; /** 3G network */ public static final int NETWORK_TYPE_3G = 5; /** 4G network */ public static final int NETWORK_TYPE_4G = 6; /** 5G NSA network */ public static final int NETWORK_TYPE_5G_NSA = 7; /** 5G SA network */ public static final int NETWORK_TYPE_5G_SA = 8; /** Not network connected */ public static final int NETWORK_TYPE_OFFLINE = 9; private final int mNetworkType; private final long mTimeSinceCreatedMillis; /** @hide */ @IntDef(prefix = "NETWORK_TYPE_", value = { NETWORK_TYPE_UNKNOWN, NETWORK_TYPE_OTHER, NETWORK_TYPE_WIFI, NETWORK_TYPE_ETHERNET, NETWORK_TYPE_2G, NETWORK_TYPE_3G, NETWORK_TYPE_4G, NETWORK_TYPE_5G_NSA, NETWORK_TYPE_5G_SA, NETWORK_TYPE_OFFLINE }) @Retention(RetentionPolicy.SOURCE) public @interface NetworkType {} /** * Network type to string. * @hide */ public static String networkTypeToString(@NetworkType int value) { switch (value) { case NETWORK_TYPE_UNKNOWN: return "NETWORK_TYPE_UNKNOWN"; case NETWORK_TYPE_OTHER: return "NETWORK_TYPE_OTHER"; case NETWORK_TYPE_WIFI: return "NETWORK_TYPE_WIFI"; case NETWORK_TYPE_ETHERNET: return "NETWORK_TYPE_ETHERNET"; case NETWORK_TYPE_2G: return "NETWORK_TYPE_2G"; case NETWORK_TYPE_3G: return "NETWORK_TYPE_3G"; case NETWORK_TYPE_4G: return "NETWORK_TYPE_4G"; case NETWORK_TYPE_5G_NSA: return "NETWORK_TYPE_5G_NSA"; case NETWORK_TYPE_5G_SA: return "NETWORK_TYPE_5G_SA"; case NETWORK_TYPE_OFFLINE: return "NETWORK_TYPE_OFFLINE"; default: return Integer.toHexString(value); } } /** * Creates a new NetworkEvent. */ private NetworkEvent(@NetworkType int type, long timeSinceCreatedMillis, @NonNull Bundle extras) { this.mNetworkType = type; this.mTimeSinceCreatedMillis = timeSinceCreatedMillis; this.mMetricsBundle = extras == null ? null : extras.deepCopy(); } /** * Gets network type. */ @NetworkType public int getNetworkType() { return mNetworkType; } /** * Gets timestamp since the creation of the log session in milliseconds. * @return the timestamp since the creation in milliseconds, or -1 if unknown. * @see LogSessionId * @see PlaybackSession * @see RecordingSession */ @Override @IntRange(from = -1) public long getTimeSinceCreatedMillis() { return mTimeSinceCreatedMillis; } /** * Gets metrics-related information that is not supported by dedicated methods. *
It is intended to be used for backwards compatibility by the metrics infrastructure.
*/
@Override
@NonNull
public Bundle getMetricsBundle() {
return mMetricsBundle;
}
@Override
public String toString() {
return "NetworkEvent { "
+ "networkType = " + mNetworkType + ", "
+ "timeSinceCreatedMillis = " + mTimeSinceCreatedMillis
+ " }";
}
@Override
public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
NetworkEvent that = (NetworkEvent) o;
return mNetworkType == that.mNetworkType
&& mTimeSinceCreatedMillis == that.mTimeSinceCreatedMillis;
}
@Override
public int hashCode() {
return Objects.hash(mNetworkType, mTimeSinceCreatedMillis);
}
@Override
public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
dest.writeInt(mNetworkType);
dest.writeLong(mTimeSinceCreatedMillis);
dest.writeBundle(mMetricsBundle);
}
@Override
public int describeContents() {
return 0;
}
private NetworkEvent(@NonNull android.os.Parcel in) {
int type = in.readInt();
long timeSinceCreatedMillis = in.readLong();
Bundle extras = in.readBundle();
this.mNetworkType = type;
this.mTimeSinceCreatedMillis = timeSinceCreatedMillis;
this.mMetricsBundle = extras;
}
/**
* Used to read a NetworkEvent from a Parcel.
*/
public static final @NonNull Parcelable.Creator It is intended to be used for backwards compatibility by the
* metrics infrastructure.
*/
public @NonNull Builder setMetricsBundle(@NonNull Bundle metricsBundle) {
mMetricsBundle = metricsBundle;
return this;
}
/** Builds the instance. */
public @NonNull NetworkEvent build() {
NetworkEvent o =
new NetworkEvent(mNetworkType, mTimeSinceCreatedMillis, mMetricsBundle);
return o;
}
}
}