10cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato/* 20cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Copyright (C) 2007 The Android Open Source Project 30cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 40cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 50cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * you may not use this file except in compliance with the License. 60cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * You may obtain a copy of the License at 70cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 80cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 90cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * 100cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Unless required by applicable law or agreed to in writing, software 110cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 120cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * See the License for the specific language governing permissions and 140cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * limitations under the License. 150cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato */ 160cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 170cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratopackage com.android.internal.statusbar; 180cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 190cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport android.os.Parcel; 200cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport android.os.Parcelable; 210cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 220cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratoimport java.io.PrintWriter; 230cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 240cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onoratopublic class StatusBarIconList implements Parcelable { 250cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private String[] mSlots; 260cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato private StatusBarIcon[] mIcons; 270cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 280cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public StatusBarIconList() { 290cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 300cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 310cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public StatusBarIconList(Parcel in) { 320cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato readFromParcel(in); 330cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 340cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 350cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void readFromParcel(Parcel in) { 360cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mSlots = in.readStringArray(); 370cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = in.readInt(); 380cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (N < 0) { 390cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons = null; 400cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } else { 410cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons = new StatusBarIcon[N]; 420cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 430cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (in.readInt() != 0) { 440cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons[i] = new StatusBarIcon(in); 450cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 460cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 470cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 480cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 490cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 500cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void writeToParcel(Parcel out, int flags) { 510cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato out.writeStringArray(mSlots); 520cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (mIcons == null) { 530cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato out.writeInt(-1); 540cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } else { 550cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = mIcons.length; 560cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato out.writeInt(N); 570cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 580cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato StatusBarIcon ic = mIcons[i]; 590cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (ic == null) { 600cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato out.writeInt(0); 610cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } else { 620cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato out.writeInt(1); 630cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato ic.writeToParcel(out, flags); 640cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 650cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 660cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 670cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 680cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 690cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public int describeContents() { 700cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return 0; 710cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 720cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 730cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato /** 740cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato * Parcelable.Creator that instantiates StatusBarIconList objects 750cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato */ 760cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public static final Parcelable.Creator<StatusBarIconList> CREATOR 770cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato = new Parcelable.Creator<StatusBarIconList>() 780cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato { 790cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public StatusBarIconList createFromParcel(Parcel parcel) 800cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato { 810cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return new StatusBarIconList(parcel); 820cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 830cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 840cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public StatusBarIconList[] newArray(int size) 850cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato { 860cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return new StatusBarIconList[size]; 870cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 880cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato }; 890cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 900cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void defineSlots(String[] slots) { 910cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = slots.length; 920cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato String[] s = mSlots = new String[N]; 930cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 940cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato s[i] = slots[i]; 950cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 960cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons = new StatusBarIcon[N]; 970cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 980cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 990cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public int getSlotIndex(String slot) { 1000cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = mSlots.length; 1010cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 1020cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (slot.equals(mSlots[i])) { 1030cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return i; 1040cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1050cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1060cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return -1; 1070cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1080cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1090cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public int size() { 1100cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return mSlots.length; 1110cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1120cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1130cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void setIcon(int index, StatusBarIcon icon) { 1140cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons[index] = icon.clone(); 1150cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1160cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1170cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void removeIcon(int index) { 1180cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato mIcons[index] = null; 1190cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1200cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1210cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public String getSlot(int index) { 1220cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return mSlots[index]; 1230cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1240cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1250cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public StatusBarIcon getIcon(int index) { 1260cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return mIcons[index]; 1270cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1280cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1290cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public int getViewIndex(int index) { 1300cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato int count = 0; 1310cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<index; i++) { 1320cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (mIcons[i] != null) { 1330cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato count++; 1340cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1350cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1360cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato return count; 1370cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1380cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1390cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void copyFrom(StatusBarIconList that) { 1400cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato if (that.mSlots == null) { 1410cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mSlots = null; 1420cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mIcons = null; 1430cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } else { 1440cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = that.mSlots.length; 1450cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mSlots = new String[N]; 1460cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mIcons = new StatusBarIcon[N]; 1470cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 1480cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mSlots[i] = that.mSlots[i]; 1490cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato this.mIcons[i] = that.mIcons[i] != null ? that.mIcons[i].clone() : null; 1500cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1510cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1520cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1530cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato 1540cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato public void dump(PrintWriter pw) { 1550cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato final int N = mSlots.length; 1560cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato pw.println("Icon list:"); 1570cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato for (int i=0; i<N; i++) { 158514ad663f0a8b239cc59409175e0bd489c591aa0Joe Onorato pw.printf(" %2d: (%s) %s\n", i, mSlots[i], mIcons[i]); 1590cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1600cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato } 1610cbda99f8721ad9b03ada04d2637fb75a2a0fecaJoe Onorato} 162