diff --git a/core/java/android/net/wimax/WimaxManagerConstants.java b/core/java/android/net/wimax/WimaxManagerConstants.java new file mode 100644 index 0000000000000..b4aaf5bffe007 --- /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 a0652f7c20d02..f27f13a64db52 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 18194ee0f298f..1b5cbb40e2342 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" /> + + + + + + @@ -718,4 +724,16 @@ 2048 + + false + + + + + + + + + + diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml old mode 100755 new mode 100644 index a819173421805..2f40a5ad2a2c5 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1362,6 +1362,12 @@ than the non-multicast mode. + view WiMAX state + Allows an application to view + the information about the state of WiMAX. + change WiMAX state + Allows an application to connect + to and disconnect from WiMAX network. bluetooth administration Allows an application to configure diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 3920257a7c433..7a98615fe836a 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -21,7 +21,7 @@ 60000 false - cell,bluetooth,wifi,nfc + cell,bluetooth,wifi,nfc,wimax bluetooth,wifi,nfc true true 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 new file mode 100644 index 0000000000000..f24d8016fca90 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png differ 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 new file mode 100644 index 0000000000000..66eb5db188d26 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png differ 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 new file mode 100644 index 0000000000000..edff74a462755 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png differ 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 new file mode 100644 index 0000000000000..1cdd4eb5fbf08 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png differ 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 new file mode 100644 index 0000000000000..95fdaf9e6f214 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png differ 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 new file mode 100644 index 0000000000000..8678e39f8d6a6 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png differ 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 new file mode 100644 index 0000000000000..1d2d2901acf36 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png differ 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 new file mode 100644 index 0000000000000..c2e4b783c31e9 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png differ 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 new file mode 100644 index 0000000000000..51b839fd55725 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png differ 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 new file mode 100644 index 0000000000000..b20c5c78ef4c3 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png differ diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml index eb644b3630b35..93ac22ed09201 100644 --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -51,6 +51,27 @@ android:visibility="gone" android:id="@+id/spacer" /> + + + + Wi-Fi three bars. - Wi-Fi signal full. + WiFi signal full. + No WiMAX. + WiMAX one bar. + WiMAX two bars. + WiMAX three bars. + WiMAX signal full. GPRS 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 c6a59d33eb0ed..b0e6968c46fd5 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 13fb03e6c677e..f45426bb260c8 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 a3058166903fd..f77e93f1ba847 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 mDataDirectionIconViews = new ArrayList(); ArrayList mDataDirectionOverlayIconViews = new ArrayList(); ArrayList mWifiIconViews = new ArrayList(); + ArrayList mWimaxIconViews = new ArrayList(); ArrayList mCombinedSignalIconViews = new ArrayList(); ArrayList mDataTypeIconViews = new ArrayList(); ArrayList mLabelViews = new ArrayList(); @@ -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