1f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk/** 2f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * Copyright (C) 2018 The Android Open Source Project 3f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * 4f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * Licensed under the Apache License, Version 2.0 (the "License"); 5f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * you may not use this file except in compliance with the License. 6f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * You may obtain a copy of the License at 7f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * 8f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * http://www.apache.org/licenses/LICENSE-2.0 9f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * 10f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * Unless required by applicable law or agreed to in writing, software 11f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * distributed under the License is distributed on an "AS IS" BASIS, 12f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * See the License for the specific language governing permissions and 14f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * limitations under the License. 15f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk */ 16f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 17f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykpackage android.hardware.radio; 18f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 19f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport android.annotation.IntDef; 20f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport android.annotation.NonNull; 21f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport android.annotation.SystemApi; 22f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport android.os.Parcel; 23f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport android.os.Parcelable; 24f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 25f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport java.lang.annotation.Retention; 26f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport java.lang.annotation.RetentionPolicy; 27f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport java.util.Collection; 28f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport java.util.Map; 29f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykimport java.util.Objects; 30f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 31f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk/** 32f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * @hide 33f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk */ 34f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk@SystemApi 35f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczykpublic final class Announcement implements Parcelable { 36f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 37f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** DAB alarm, RDS emergency program type (PTY 31). */ 38f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_EMERGENCY = 1; 39f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** DAB warning. */ 40f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_WARNING = 2; 41f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** DAB road traffic, RDS TA, HD Radio transportation. */ 42f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_TRAFFIC = 3; 43f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** Weather. */ 44f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_WEATHER = 4; 45f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** News. */ 46f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_NEWS = 5; 47f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** DAB event, special event. */ 48f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_EVENT = 6; 49f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** DAB sport report, RDS sports. */ 50f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_SPORT = 7; 51f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** All others. */ 52f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final int TYPE_MISC = 8; 53f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** @hide */ 54f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @IntDef(prefix = { "TYPE_" }, value = { 55f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_EMERGENCY, 56f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_WARNING, 57f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_TRAFFIC, 58f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_WEATHER, 59f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_NEWS, 60f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_EVENT, 61f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_SPORT, 62f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk TYPE_MISC, 63f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk }) 64f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @Retention(RetentionPolicy.SOURCE) 65f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public @interface Type {} 66f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 67f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** 68f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * Listener of announcement list events. 69f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk */ 70f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public interface OnListUpdatedListener { 71f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** 72f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * An event called whenever a list of active announcements change. 73f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * 74f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * The entire list is sent each time a new announcement appears or any ends broadcasting. 75f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * 76f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk * @param activeAnnouncements a full list of active announcements 77f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk */ 78f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk void onListUpdated(Collection<Announcement> activeAnnouncements); 79f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 80f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 81f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @NonNull private final ProgramSelector mSelector; 82f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @Type private final int mType; 83f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @NonNull private final Map<String, String> mVendorInfo; 84f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 85f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk /** @hide */ 86f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public Announcement(@NonNull ProgramSelector selector, @Type int type, 87f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @NonNull Map<String, String> vendorInfo) { 88f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mSelector = Objects.requireNonNull(selector); 89f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mType = Objects.requireNonNull(type); 90f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mVendorInfo = Objects.requireNonNull(vendorInfo); 91f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 92f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 93f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk private Announcement(@NonNull Parcel in) { 94f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mSelector = in.readTypedObject(ProgramSelector.CREATOR); 95f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mType = in.readInt(); 96f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk mVendorInfo = Utils.readStringMap(in); 97f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 98f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 99f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @Override 100f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public void writeToParcel(Parcel dest, int flags) { 101f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk dest.writeTypedObject(mSelector, 0); 102f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk dest.writeInt(mType); 103f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk Utils.writeStringMap(dest, mVendorInfo); 104f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 105f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 106f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk @Override 107f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public int describeContents() { 108f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return 0; 109f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 110f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 111f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public static final Parcelable.Creator<Announcement> CREATOR = 112f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk new Parcelable.Creator<Announcement>() { 113f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public Announcement createFromParcel(Parcel in) { 114f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return new Announcement(in); 115f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 116f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 117f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public Announcement[] newArray(int size) { 118f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return new Announcement[size]; 119f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 120f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk }; 121f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 122f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public @NonNull ProgramSelector getSelector() { 123f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return mSelector; 124f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 125f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 126f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public @Type int getType() { 127f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return mType; 128f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 129f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk 130f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk public @NonNull Map<String, String> getVendorInfo() { 131f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk return mVendorInfo; 132f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk } 133f151a7b3377e956fedd4f3e63afc880c35310219Tomasz Wasilczyk} 134