1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2011 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.layoutlib.bridge.bars;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport com.android.ide.common.rendering.api.LayoutLog;
20553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport com.android.layoutlib.bridge.Bridge;
21553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport com.android.layoutlib.bridge.android.BridgeContext;
22553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
23553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport com.android.layoutlib.bridge.impl.ParserFactory;
24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.resources.Density;
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParserException;
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.Context;
29553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport android.graphics.drawable.Drawable;
30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.Gravity;
31553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport android.view.View;
32553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport android.widget.ImageView;
33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.LinearLayout;
34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.TextView;
35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
36553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport java.io.IOException;
37553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Guptaimport java.io.InputStream;
38553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic class StatusBar extends CustomBar {
40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
41553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta    private final Context mContext;
42553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta    private final int mSimulatedPlatformVersion;
43553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta
445a734548455e5bcc8a5fd6b3972017086d3c1287Deepanshu Gupta    public StatusBar(Context context, Density density, int direction, boolean RtlEnabled,
4558ff7de971a8172e40c09c3a8489eb276441e1b6Deepanshu Gupta            int simulatedPlatformVersion) throws XmlPullParserException {
468930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta        // FIXME: if direction is RTL but it's not enabled in application manifest, mirror this bar.
4742c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta        super(context, LinearLayout.HORIZONTAL, "/bars/status_bar.xml", "status_bar.xml",
4842c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta                simulatedPlatformVersion);
49553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        mContext = context;
50553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        mSimulatedPlatformVersion = simulatedPlatformVersion;
51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // FIXME: use FILL_H?
53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT);
5458ff7de971a8172e40c09c3a8489eb276441e1b6Deepanshu Gupta        setBackgroundColor(Config.getStatusBarColor(simulatedPlatformVersion));
55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // Cannot access the inside items through id because no R.id values have been
57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // created for them.
58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // We do know the order though.
59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        // 0 is the spacer
60553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        loadIcon(1, "stat_sys_wifi_signal_4_fully."
61553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                        + Config.getWifiIconType(simulatedPlatformVersion), density);
6284cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta        loadIcon(2, "stat_sys_battery_100.png", density);
63553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        setText(3, Config.getTime(simulatedPlatformVersion), false)
64553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                .setTextColor(Config.getTimeColor(simulatedPlatformVersion));
65553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta    }
66553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta
67553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta    @Override
68553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta    protected void loadIcon(int index, String iconName, Density density) {
69553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        if (!iconName.endsWith(".xml")) {
70553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            super.loadIcon(index, iconName, density);
71553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            return;
72553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        }
73553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        View child = getChildAt(index);
74553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        if (child instanceof ImageView) {
75553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            ImageView imageView = (ImageView) child;
76553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            // The xml is stored only in xhdpi.
77553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            IconLoader iconLoader = new IconLoader(iconName, Density.XHIGH,
78553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    mSimulatedPlatformVersion, null);
79553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            InputStream stream = iconLoader.getIcon();
80553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta
81553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            if (stream != null) {
82553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                try {
83553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    BridgeXmlBlockParser parser = new BridgeXmlBlockParser(
84553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                            ParserFactory.create(stream, null), (BridgeContext) mContext, true);
85553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    Drawable drawable = Drawable.createFromXml(mContext.getResources(), parser);
86553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    if (drawable != null) {
87553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                        imageView.setImageDrawable(drawable);
88553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    }
89553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                } catch (XmlPullParserException e) {
90553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Unable to draw wifi icon", e,
91553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                            null);
92553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                } catch (IOException e) {
93553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                    Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Unable to draw wifi icon", e,
94553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                            null);
95553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta                }
96553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta            }
97553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta        }
98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    protected TextView getStyleableTextView() {
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        return null;
103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
105