19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.telephony.gsm.stk;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ImageDescriptor {
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // members
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int width;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int height;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int codingScheme;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int imageId;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int highOffset;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int lowOffset;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int length;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // constants
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int CODING_SCHEME_BASIC = 0x11;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int CODING_SCHEME_COLOUR = 0x21;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3604e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    // public static final int ID_LENGTH = 9;
3704e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville    // ID_LENGTH substituted by IccFileHandlerBase.GET_RESPONSE_EF_IMG_SIZE_BYTES
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ImageDescriptor() {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        width = 0;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        height = 0;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        codingScheme = 0;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        imageId = 0;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        highOffset = 0;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        lowOffset = 0;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        length = 0;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Extract descriptor information about image instance.
5104e71b3db84fd5f7fc4eefb49a33154ea91ec9fcWink Saville     *
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param rawData
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param valueIndex
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return ImageDescriptor
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static ImageDescriptor parse(byte[] rawData, int valueIndex) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ImageDescriptor d = new ImageDescriptor();
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.width = rawData[valueIndex++] & 0xff;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.height = rawData[valueIndex++] & 0xff;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.codingScheme = rawData[valueIndex++] & 0xff;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // parse image id
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.imageId = (rawData[valueIndex++] & 0xff) << 8;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.imageId |= rawData[valueIndex++] & 0xff;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // parse offset
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.highOffset = (rawData[valueIndex++] & 0xff); // high byte offset
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.lowOffset = rawData[valueIndex++] & 0xff; // low byte offset
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d.length = ((rawData[valueIndex++] & 0xff) << 8 | (rawData[valueIndex++] & 0xff));
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            StkLog.d("ImageDescripter", "parse; failed parsing image descriptor");
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            d = null;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return d;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
78