diff options
author | Robert Greenwalt <robdroid@android.com> | 2011-11-08 10:01:07 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-11-08 10:01:07 -0800 |
commit | ea54b7608584bc0535c9e89417778c3e95b50975 (patch) | |
tree | e5753ed7b48afc186d593c8b070558993a1307a4 | |
parent | 1366c756d28cdbb6c7c07959dfb4c93c81a9539d (diff) | |
parent | 148c7d0de720a92632aa6ed10a39bfc38b427239 (diff) | |
download | frameworks_base-ea54b7608584bc0535c9e89417778c3e95b50975.zip frameworks_base-ea54b7608584bc0535c9e89417778c3e95b50975.tar.gz frameworks_base-ea54b7608584bc0535c9e89417778c3e95b50975.tar.bz2 |
Merge "Wimax : wimax framework related open source." into ics-mr1
25 files changed, 395 insertions, 4 deletions
diff --git a/core/java/android/net/wimax/WimaxManagerConstants.java b/core/java/android/net/wimax/WimaxManagerConstants.java new file mode 100644 index 0000000..b4aaf5b --- /dev/null +++ b/core/java/android/net/wimax/WimaxManagerConstants.java @@ -0,0 +1,104 @@ +package android.net.wimax; + +/** + * {@hide} + */ +public class WimaxManagerConstants +{ + + /** + * Used by android.net.wimax.WimaxManager for handling management of + * Wimax access. + */ + public static final String WIMAX_SERVICE = "WiMax"; + + /** + * Broadcast intent action indicating that Wimax has been enabled, disabled, + * enabling, disabling, or unknown. One extra provides this state as an int. + * Another extra provides the previous state, if available. + */ + public static final String NET_4G_STATE_CHANGED_ACTION = + "android.net.fourG.NET_4G_STATE_CHANGED"; + + /** + * The lookup key for an int that indicates whether Wimax is enabled, + * disabled, enabling, disabling, or unknown. + */ + public static final String EXTRA_WIMAX_STATUS = "wimax_status"; + + /** + * Broadcast intent action indicating that Wimax state has been changed + * state could be scanning, connecting, connected, disconnecting, disconnected + * initializing, initialized, unknown and ready. One extra provides this state as an int. + * Another extra provides the previous state, if available. + */ + public static final String WIMAX_NETWORK_STATE_CHANGED_ACTION = + "android.net.fourG.wimax.WIMAX_NETWORK_STATE_CHANGED"; + + /** + * Broadcast intent action indicating that Wimax signal level has been changed. + * Level varies from 0 to 3. + */ + public static final String SIGNAL_LEVEL_CHANGED_ACTION = + "android.net.wimax.SIGNAL_LEVEL_CHANGED"; + + /** + * The lookup key for an int that indicates whether Wimax state is + * scanning, connecting, connected, disconnecting, disconnected + * initializing, initialized, unknown and ready. + */ + public static final String EXTRA_WIMAX_STATE = "WimaxState"; + public static final String EXTRA_4G_STATE = "4g_state"; + public static final String EXTRA_WIMAX_STATE_INT = "WimaxStateInt"; + /** + * The lookup key for an int that indicates whether state of Wimax + * is idle. + */ + public static final String EXTRA_WIMAX_STATE_DETAIL = "WimaxStateDetail"; + + /** + * The lookup key for an int that indicates Wimax signal level. + */ + public static final String EXTRA_NEW_SIGNAL_LEVEL = "newSignalLevel"; + + /** + * Indicatates Wimax is disabled. + */ + public static final int NET_4G_STATE_DISABLED = 1; + + /** + * Indicatates Wimax is enabled. + */ + public static final int NET_4G_STATE_ENABLED = 3; + + /** + * Indicatates Wimax status is known. + */ + public static final int NET_4G_STATE_UNKNOWN = 4; + + /** + * Indicatates Wimax is in idle state. + */ + public static final int WIMAX_IDLE = 6; + + /** + * Indicatates Wimax is being deregistered. + */ + public static final int WIMAX_DEREGISTRATION = 8; + + /** + * Indicatates wimax state is unknown. + */ + public static final int WIMAX_STATE_UNKNOWN = 0; + + /** + * Indicatates wimax state is connected. + */ + public static final int WIMAX_STATE_CONNECTED = 7; + + /** + * Indicatates wimax state is disconnected. + */ + public static final int WIMAX_STATE_DISCONNECTED = 9; + +} diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 63b3664..7000e75 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1182,6 +1182,7 @@ public final class Settings { */ public static final String RADIO_WIFI = "wifi"; + public static final String RADIO_WIMAX = "wimax"; /** * Constant for use in AIRPLANE_MODE_RADIOS to specify Cellular radio. */ @@ -2899,6 +2900,8 @@ public final class Settings { */ public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on"; + public static final String WIMAX_NETWORKS_AVAILABLE_NOTIFICATION_ON = + "wimax_networks_available_notification_on"; /** * Delay (in seconds) before repeating the Wi-Fi networks available notification. diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 18194ee..1b5cbb4 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -423,6 +423,11 @@ android:description="@string/permdesc_accessWifiState" android:label="@string/permlab_accessWifiState" /> + <permission android:name="android.permission.ACCESS_WIMAX_STATE" + android:permissionGroup="android.permission-group.NETWORK" + android:protectionLevel="normal" + android:description="@string/permdesc_accessWimaxState" + android:label="@string/permlab_accessWimaxState" /> <!-- Allows applications to connect to paired bluetooth devices --> <permission android:name="android.permission.BLUETOOTH" android:permissionGroup="android.permission-group.NETWORK" @@ -984,6 +989,11 @@ android:description="@string/permdesc_changeWifiState" android:label="@string/permlab_changeWifiState" /> + <permission android:name="android.permission.CHANGE_WIMAX_STATE" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_changeWimaxState" + android:label="@string/permlab_changeWimaxState" /> <!-- Allows applications to enter Wi-Fi Multicast mode --> <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" diff --git a/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png b/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..c2e4b78 --- /dev/null +++ b/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png diff --git a/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png b/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png Binary files differnew file mode 100644 index 0000000..51b839f --- /dev/null +++ b/core/res/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 48e8f1e..8b07e34 100755..100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -166,6 +166,12 @@ </string-array> <!-- List of regexpressions describing the interface (if any) that represent tetherable + WiMAX interfaces. If the device doesn't want to support tethering over Wifi this + should be empty. An example would be "softap.*" --> + <string-array translatable="false" name="config_tether_wimax_regexs"> + </string-array> + + <!-- List of regexpressions describing the interface (if any) that represent tetherable bluetooth interfaces. If the device doesn't want to support tethering over bluetooth this should be empty. --> <string-array translatable="false" name="config_tether_bluetooth_regexs"> @@ -718,4 +724,16 @@ <!-- Default network policy warning threshold, in megabytes. --> <integer name="config_networkPolicyDefaultWarning">2048</integer> + <!-- Set and Unsets WiMAX --> + <bool name="config_wimaxEnabled">false</bool> + <!-- Location of the wimax framwork jar location --> + <string name="config_wimaxServiceJarLocation"></string> + <!-- Location of the wimax native library locaiton --> + <string name="config_wimaxNativeLibLocation"></string> + <!-- Name of the wimax manager class --> + <string name="config_wimaxManagerClassname"></string> + <!-- Name of the wimax service class --> + <string name="config_wimaxServiceClassname"></string> + <!-- Name of the wimax state tracker clas --> + <string name="config_wimaxStateTrackerClassname"></string> </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index a819173..2f40a5a 100755..100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1362,6 +1362,12 @@ than the non-multicast mode.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> + <string name="permlab_accessWimaxState">view WiMAX state</string> + <string name="permdesc_accessWimaxState">Allows an application to view + the information about the state of WiMAX.</string> + <string name="permlab_changeWimaxState">change WiMAX state</string> + <string name="permdesc_changeWimaxState">Allows an application to connect + to and disconnect from WiMAX network.</string> <string name="permlab_bluetoothAdmin">bluetooth administration</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_bluetoothAdmin" product="tablet">Allows an application to configure diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 03d5bd2..0891525 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -21,7 +21,7 @@ <integer name="def_screen_off_timeout">60000</integer> <bool name="def_airplane_mode_on">false</bool> <!-- Comma-separated list of bluetooth, wifi, and cell. --> - <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc</string> + <string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi,nfc,wimax</string> <string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi,nfc</string> <bool name="def_auto_time">true</bool> <bool name="def_auto_time_zone">true</bool> diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png Binary files differnew file mode 100644 index 0000000..f24d801 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..66eb5db --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png Binary files differnew file mode 100644 index 0000000..edff74a --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..1cdd4eb --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png Binary files differnew file mode 100644 index 0000000..95fdaf9 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..8678e39 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png Binary files differnew file mode 100644 index 0000000..1d2d290 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..c2e4b78 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png Binary files differnew file mode 100644 index 0000000..51b839f --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png Binary files differnew file mode 100644 index 0000000..b20c5c7 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml index eb644b3..93ac22e 100644 --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -52,6 +52,27 @@ android:id="@+id/spacer" /> <FrameLayout + android:id="@+id/wimax_combo" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_marginRight="-6dp" + > + <ImageView + android:id="@+id/wimax_signal" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:scaleType="center" + /> + <ImageView + android:id="@+id/wimax_inout" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_gravity="center|bottom" + /> + </FrameLayout> + <FrameLayout android:layout_height="wrap_content" android:layout_width="wrap_content" > diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 1a6cae2..a0d7b13 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -256,7 +256,12 @@ <!-- Content description of the WIFI signal when it is three bars for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_wifi_three_bars">Wi-Fi three bars.</string> <!-- Content description of the WIFI signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> - <string name="accessibility_wifi_signal_full">Wi-Fi signal full.</string> + <string name="accessibility_wifi_signal_full">WiFi signal full.</string> + <string name="accessibility_no_wimax">No WiMAX.</string> + <string name="accessibility_wimax_one_bar">WiMAX one bar.</string> + <string name="accessibility_wimax_two_bars">WiMAX two bars.</string> + <string name="accessibility_wimax_three_bars">WiMAX three bars.</string> + <string name="accessibility_wimax_signal_full">WiMAX signal full.</string> <!-- Content description of the data connection type GPRS for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_data_connection_gprs">GPRS</string> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index c6a59d3..b0e6968 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -350,7 +350,11 @@ public class PhoneStatusBar extends StatusBar { (SignalClusterView)sb.findViewById(R.id.signal_cluster); mNetworkController.addSignalCluster(signalCluster); signalCluster.setNetworkController(mNetworkController); - + final ImageView wimaxRSSI = + (ImageView)sb.findViewById(R.id.wimax_signal); + if (wimaxRSSI != null) { + mNetworkController.addWimaxIconView(wimaxRSSI); + } // Recents Panel mRecentTasksLoader = new RecentTasksLoader(context); updateRecentsPanel(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java index 13fb03e..f45426b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityContentDescriptions.java @@ -34,4 +34,11 @@ public class AccessibilityContentDescriptions { R.string.accessibility_wifi_three_bars, R.string.accessibility_wifi_signal_full }; + static final int[] WIMAX_CONNECTION_STRENGTH = { + R.string.accessibility_no_wimax, + R.string.accessibility_wimax_one_bar, + R.string.accessibility_wimax_two_bars, + R.string.accessibility_wimax_three_bars, + R.string.accessibility_wimax_signal_full + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index a305816..f77e93f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -31,6 +31,7 @@ import android.net.NetworkInfo; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.net.wimax.WimaxManagerConstants; import android.os.Binder; import android.os.Handler; import android.os.Message; @@ -90,6 +91,7 @@ public class NetworkController extends BroadcastReceiver { String mContentDescriptionPhoneSignal; String mContentDescriptionWifi; + String mContentDescriptionWimax; String mContentDescriptionCombinedSignal; String mContentDescriptionDataType; @@ -108,6 +110,14 @@ public class NetworkController extends BroadcastReceiver { private int mBluetoothTetherIconId = com.android.internal.R.drawable.stat_sys_tether_bluetooth; + //wimax + private boolean mIsWimaxEnabled = false; + private boolean mWimaxConnected = false; + private boolean mWimaxIdle = false; + private int mWimaxIconId = 0; + private int mWimaxSignal = 0; + private int mWimaxState = 0; + private int mWimaxExtraState = 0; // data connectivity (regardless of state, can we access the internet?) // state of inet connection - 0 not connected, 100 connected private int mInetCondition = 0; @@ -121,6 +131,7 @@ public class NetworkController extends BroadcastReceiver { ArrayList<ImageView> mDataDirectionIconViews = new ArrayList<ImageView>(); ArrayList<ImageView> mDataDirectionOverlayIconViews = new ArrayList<ImageView>(); ArrayList<ImageView> mWifiIconViews = new ArrayList<ImageView>(); + ArrayList<ImageView> mWimaxIconViews = new ArrayList<ImageView>(); ArrayList<ImageView> mCombinedSignalIconViews = new ArrayList<ImageView>(); ArrayList<ImageView> mDataTypeIconViews = new ArrayList<ImageView>(); ArrayList<TextView> mLabelViews = new ArrayList<TextView>(); @@ -129,6 +140,7 @@ public class NetworkController extends BroadcastReceiver { int mLastDataDirectionIconId = -1; int mLastDataDirectionOverlayIconId = -1; int mLastWifiIconId = -1; + int mLastWimaxIconId = -1; int mLastCombinedSignalIconId = -1; int mLastDataTypeIconId = -1; String mLastLabel = ""; @@ -164,6 +176,7 @@ public class NetworkController extends BroadcastReceiver { // set up the default wifi icon, used when no radios have ever appeared updateWifiIcons(); + updateWimaxIcons(); // telephony mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); @@ -200,6 +213,13 @@ public class NetworkController extends BroadcastReceiver { filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); + boolean isWimaxConfigEnabled = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_wimaxEnabled); + if(isWimaxConfigEnabled) { + filter.addAction(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION); + filter.addAction(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION); + filter.addAction(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION); + } context.registerReceiver(this, filter); // AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it @@ -224,6 +244,9 @@ public class NetworkController extends BroadcastReceiver { public void addWifiIconView(ImageView v) { mWifiIconViews.add(v); } + public void addWimaxIconView(ImageView v) { + mWimaxIconViews.add(v); + } public void addCombinedSignalIconView(ImageView v) { mCombinedSignalIconViews.add(v); @@ -285,6 +308,11 @@ public class NetworkController extends BroadcastReceiver { } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { updateAirplaneMode(); refreshViews(); + } else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) || + action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) || + action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) { + updateWimaxState(intent); + refreshViews(); } } @@ -735,6 +763,51 @@ public class NetworkController extends BroadcastReceiver { } + // ===== Wimax =================================================================== + + private final void updateWimaxState(Intent intent) { + final String action = intent.getAction(); + boolean wasConnected = mWimaxConnected; + if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION)) { + int wimaxStatus = intent.getIntExtra(WimaxManagerConstants.EXTRA_4G_STATE, + WimaxManagerConstants.NET_4G_STATE_UNKNOWN); + mIsWimaxEnabled = (wimaxStatus == + WimaxManagerConstants.NET_4G_STATE_ENABLED)? true : false; + } else if (action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION)) { + mWimaxSignal = intent.getIntExtra(WimaxManagerConstants.EXTRA_NEW_SIGNAL_LEVEL, 0); + } else if (action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) { + mWimaxState = intent.getIntExtra(WimaxManagerConstants.EXTRA_WIMAX_STATE, + WimaxManagerConstants.NET_4G_STATE_UNKNOWN); + mWimaxExtraState = intent.getIntExtra( + WimaxManagerConstants.EXTRA_WIMAX_STATE_DETAIL, + WimaxManagerConstants.NET_4G_STATE_UNKNOWN); + mWimaxConnected = (mWimaxState == + WimaxManagerConstants.WIMAX_STATE_CONNECTED) ? true : false; + mWimaxIdle = (mWimaxExtraState == WimaxManagerConstants.WIMAX_IDLE)? true : false; + } + updateWimaxIcons(); + } + private void updateWimaxIcons() { + Slog.d(TAG, "in .... updateWimaxIcons function : "+mIsWimaxEnabled); + if (mIsWimaxEnabled) { + if (mWimaxConnected) { + Slog.d(TAG, "in .... updateWimaxIcons function WiMAX COnnected"); + if (mWimaxIdle) + mWimaxIconId = WimaxIcons.WIMAX_IDLE; + else + mWimaxIconId = WimaxIcons.WIMAX_SIGNAL_STRENGTH[mInetCondition][mWimaxSignal]; + mContentDescriptionWimax = mContext.getString( + AccessibilityContentDescriptions.WIMAX_CONNECTION_STRENGTH[mWimaxSignal]); + } else { + Slog.d(TAG, "in .... updateWimaxIcons function WiMAX Disconnected"); + mWimaxIconId = WimaxIcons.WIMAX_DISCONNECTED; + mContentDescriptionWimax = mContext.getString(R.string.accessibility_no_wimax); + } + } else { + Slog.d(TAG, "in .... updateWimaxIcons function wimax icon id 0"); + mWimaxIconId = 0; + } + } // ===== Full or limited Internet connectivity ================================== private void updateConnectivity(Intent intent) { @@ -761,6 +834,7 @@ public class NetworkController extends BroadcastReceiver { // We want to update all the icons, all at once, for any condition change updateDataNetType(); + updateWimaxIcons(); updateDataIcon(); updateTelephonySignalStrength(); updateWifiIcons(); @@ -945,6 +1019,21 @@ public class NetworkController extends BroadcastReceiver { } } + // the wimax icon on phones + if (mLastWimaxIconId != mWimaxIconId) { + mLastWimaxIconId = mWimaxIconId; + N = mWimaxIconViews.size(); + for (int i=0; i<N; i++) { + final ImageView v = mWimaxIconViews.get(i); + if (mWimaxIconId == 0) { + v.setVisibility(View.INVISIBLE); + } else { + v.setVisibility(View.VISIBLE); + v.setImageResource(mWimaxIconId); + v.setContentDescription(mContentDescriptionWimax); + } + } + } // the combined data signal icon if (mLastCombinedSignalIconId != combinedSignalIconId) { mLastCombinedSignalIconId = combinedSignalIconId; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WimaxIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WimaxIcons.java new file mode 100644 index 0000000..8605489 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WimaxIcons.java @@ -0,0 +1,37 @@ +/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import com.android.systemui.R;
+
+class WimaxIcons {
+ static final int[][] WIMAX_SIGNAL_STRENGTH = {
+ { R.drawable.stat_sys_data_wimax_signal_0,
+ R.drawable.stat_sys_data_wimax_signal_1,
+ R.drawable.stat_sys_data_wimax_signal_2,
+ R.drawable.stat_sys_data_wimax_signal_3 },
+ { R.drawable.stat_sys_data_wimax_signal_0_fully,
+ R.drawable.stat_sys_data_wimax_signal_1_fully,
+ R.drawable.stat_sys_data_wimax_signal_2_fully,
+ R.drawable.stat_sys_data_wimax_signal_3_fully }
+ };
+
+ static final int WIMAX_DISCONNECTED =
+ R.drawable.stat_sys_data_wimax_signal_disconnected;
+ static final int WIMAX_IDLE = R.drawable.stat_sys_data_wimax_signal_idle;
+ static final int WIFI_LEVEL_COUNT = WIMAX_SIGNAL_STRENGTH[0].length;
+}
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 8c42f31..6e689c5 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -26,8 +26,10 @@ import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; import android.bluetooth.BluetoothTetheringDataTracker; import android.content.ContentResolver; import android.content.Context; +import android.content.ContextWrapper; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.database.ContentObserver; import android.net.ConnectivityManager; import android.net.DummyDataStateTracker; @@ -51,6 +53,7 @@ import android.net.Proxy; import android.net.ProxyProperties; import android.net.RouteInfo; import android.net.wifi.WifiStateTracker; +import android.net.wimax.WimaxManagerConstants; import android.os.Binder; import android.os.FileUtils; import android.os.Handler; @@ -78,10 +81,14 @@ import com.android.server.connectivity.Tethering; import com.android.server.connectivity.Vpn; import com.google.android.collect.Lists; import com.google.android.collect.Sets; - +import dalvik.system.DexClassLoader; import java.io.FileDescriptor; import java.io.IOException; import java.io.PrintWriter; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.InvocationTargetException; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; @@ -491,6 +498,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { mNetTrackers[netType] = BluetoothTetheringDataTracker.getInstance(); mNetTrackers[netType].startMonitoring(context, mHandler); break; + case ConnectivityManager.TYPE_WIMAX: + mNetTrackers[netType] = makeWimaxStateTracker(); + if (mNetTrackers[netType != null) { + mNetTrackers[netType].startMonitoring(context, mHandler); + } + break; case ConnectivityManager.TYPE_ETHERNET: mNetTrackers[netType] = EthernetDataTracker.getInstance(); mNetTrackers[netType].startMonitoring(context, mHandler); @@ -531,7 +544,81 @@ public class ConnectivityService extends IConnectivityManager.Stub { loadGlobalProxy(); } +private NetworkStateTracker makeWimaxStateTracker() { + //Initialize Wimax + DexClassLoader wimaxClassLoader; + Class wimaxStateTrackerClass = null; + Class wimaxServiceClass = null; + Class wimaxManagerClass; + String wimaxJarLocation; + String wimaxLibLocation; + String wimaxManagerClassName; + String wimaxServiceClassName; + String wimaxStateTrackerClassName; + + NetworkStateTracker wimaxStateTracker = null; + + boolean isWimaxEnabled = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_wimaxEnabled); + + if (isWimaxEnabled) { + try { + wimaxJarLocation = mContext.getResources().getString( + com.android.internal.R.string.config_wimaxServiceJarLocation); + wimaxLibLocation = mContext.getResources().getString( + com.android.internal.R.string.config_wimaxNativeLibLocation); + wimaxManagerClassName = mContext.getResources().getString( + com.android.internal.R.string.config_wimaxManagerClassname); + wimaxServiceClassName = mContext.getResources().getString( + com.android.internal.R.string.config_wimaxServiceClassname); + wimaxStateTrackerClassName = mContext.getResources().getString( + com.android.internal.R.string.config_wimaxStateTrackerClassname); + + log("wimaxJarLocation: " + wimaxJarLocation); + wimaxClassLoader = new DexClassLoader(wimaxJarLocation, + new ContextWrapper(mContext).getCacheDir().getAbsolutePath(), + wimaxLibLocation, ClassLoader.getSystemClassLoader()); + + try { + wimaxManagerClass = wimaxClassLoader.loadClass(wimaxManagerClassName); + wimaxStateTrackerClass = wimaxClassLoader.loadClass(wimaxStateTrackerClassName); + wimaxServiceClass = wimaxClassLoader.loadClass(wimaxServiceClassName); + } catch (ClassNotFoundException ex) { + loge("Exception finding Wimax classes: " + ex.toString()); + return null; + } + } catch(Resources.NotFoundException ex) { + loge("Wimax Resources does not exist!!! "); + return null; + } + try { + log("Starting Wimax Service... "); + + Constructor wmxStTrkrConst = wimaxStateTrackerClass.getConstructor + (new Class[] {Context.class, Handler.class}); + wimaxStateTracker = (NetworkStateTracker)wmxStTrkrConst.newInstance(mContext, + mHandler); + + Constructor wmxSrvConst = wimaxServiceClass.getDeclaredConstructor + (new Class[] {Context.class, wimaxStateTrackerClass}); + wmxSrvConst.setAccessible(true); + IBinder svcInvoker = (IBinder)wmxSrvConst.newInstance(mContext, wimaxStateTracker); + wmxSrvConst.setAccessible(false); + + ServiceManager.addService(WimaxManagerConstants.WIMAX_SERVICE, svcInvoker); + + } catch(Exception ex) { + loge("Exception creating Wimax classes: " + ex.toString()); + return null; + } + } else { + loge("Wimax is not enabled or not added to the network attributes!!! "); + return null; + } + + return wimaxStateTracker; + } /** * Sets the preferred network. * @param preference the new preference |