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