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