Merge "Disable notification scans when p2p is connected" into jb-mr1-dev

This commit is contained in:
Irfan Sheriff
2012-09-17 20:58:42 -07:00
committed by Android (Google) Code Review
5 changed files with 44 additions and 18 deletions

View File

@@ -5613,6 +5613,13 @@ public final class Settings {
public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS = public static final String WIFI_SUPPLICANT_SCAN_INTERVAL_MS =
"wifi_supplicant_scan_interval_ms"; "wifi_supplicant_scan_interval_ms";
/**
* The interval in milliseconds to scan at supplicant when p2p is connected
* @hide
*/
public static final String WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS =
"wifi_scan_interval_p2p_connected_ms";
/** /**
* Whether the Wi-Fi watchdog is enabled. * Whether the Wi-Fi watchdog is enabled.
*/ */

View File

@@ -292,6 +292,9 @@
<!-- Integer indicating wpa_supplicant scan interval in milliseconds --> <!-- Integer indicating wpa_supplicant scan interval in milliseconds -->
<integer translatable="false" name="config_wifi_supplicant_scan_interval">15000</integer> <integer translatable="false" name="config_wifi_supplicant_scan_interval">15000</integer>
<!-- Integer indicating wpa_supplicant scan interval when p2p is connected in milliseconds -->
<integer translatable="false" name="config_wifi_scan_interval_p2p_connected">60000</integer>
<!-- Integer indicating the framework scan interval in milliseconds. This is used in the scenario <!-- Integer indicating the framework scan interval in milliseconds. This is used in the scenario
where the chipset does not support background scanning (config_wifi_background_scan_suport where the chipset does not support background scanning (config_wifi_background_scan_suport
is false) to set up a periodic wake up scan so that the device can connect to a new access is false) to set up a periodic wake up scan so that the device can connect to a new access

View File

@@ -275,6 +275,7 @@
<java-symbol type="integer" name="config_ntpTimeout" /> <java-symbol type="integer" name="config_ntpTimeout" />
<java-symbol type="integer" name="config_wifi_framework_scan_interval" /> <java-symbol type="integer" name="config_wifi_framework_scan_interval" />
<java-symbol type="integer" name="config_wifi_supplicant_scan_interval" /> <java-symbol type="integer" name="config_wifi_supplicant_scan_interval" />
<java-symbol type="integer" name="config_wifi_scan_interval_p2p_connected" />
<java-symbol type="integer" name="db_connection_pool_size" /> <java-symbol type="integer" name="db_connection_pool_size" />
<java-symbol type="integer" name="db_journal_size_limit" /> <java-symbol type="integer" name="db_journal_size_limit" />
<java-symbol type="integer" name="db_wal_autocheckpoint" /> <java-symbol type="integer" name="db_wal_autocheckpoint" />

View File

@@ -75,6 +75,7 @@ import android.util.EventLog;
import android.util.Log; import android.util.Log;
import android.util.LruCache; import android.util.LruCache;
import com.android.internal.R;
import com.android.internal.app.IBatteryStats; import com.android.internal.app.IBatteryStats;
import com.android.internal.util.AsyncChannel; import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol; import com.android.internal.util.Protocol;
@@ -112,6 +113,7 @@ public class WifiStateMachine extends StateMachine {
private ConnectivityManager mCm; private ConnectivityManager mCm;
private final boolean mP2pSupported; private final boolean mP2pSupported;
private final AtomicBoolean mP2pConnected = new AtomicBoolean(false);
private final String mPrimaryDeviceType; private final String mPrimaryDeviceType;
/* Scan results handling */ /* Scan results handling */
@@ -595,16 +597,16 @@ public class WifiStateMachine extends StateMachine {
mScanIntent = PendingIntent.getBroadcast(mContext, SCAN_REQUEST, scanIntent, 0); mScanIntent = PendingIntent.getBroadcast(mContext, SCAN_REQUEST, scanIntent, 0);
mDefaultFrameworkScanIntervalMs = mContext.getResources().getInteger( mDefaultFrameworkScanIntervalMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_wifi_framework_scan_interval); R.integer.config_wifi_framework_scan_interval);
mDriverStopDelayMs = mContext.getResources().getInteger( mDriverStopDelayMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_wifi_driver_stop_delay); R.integer.config_wifi_driver_stop_delay);
mBackgroundScanSupported = mContext.getResources().getBoolean( mBackgroundScanSupported = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_wifi_background_scan_support); R.bool.config_wifi_background_scan_support);
mPrimaryDeviceType = mContext.getResources().getString( mPrimaryDeviceType = mContext.getResources().getString(
com.android.internal.R.string.config_wifi_p2p_device_type); R.string.config_wifi_p2p_device_type);
mUserWantsSuspendOpt.set(Settings.Secure.getInt(mContext.getContentResolver(), mUserWantsSuspendOpt.set(Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1); Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1);
@@ -2011,6 +2013,10 @@ public class WifiStateMachine extends StateMachine {
replyToMessage(message, WifiManager.RSSI_PKTCNT_FETCH_FAILED, replyToMessage(message, WifiManager.RSSI_PKTCNT_FETCH_FAILED,
WifiManager.BUSY); WifiManager.BUSY);
break; break;
case WifiP2pService.P2P_CONNECTION_CHANGED:
NetworkInfo info = (NetworkInfo) message.obj;
mP2pConnected.set(info.isConnected());
break;
default: default:
loge("Error! unhandled message" + message); loge("Error! unhandled message" + message);
break; break;
@@ -2408,7 +2414,7 @@ public class WifiStateMachine extends StateMachine {
mNetworkInfo.setIsAvailable(true); mNetworkInfo.setIsAvailable(true);
int defaultInterval = mContext.getResources().getInteger( int defaultInterval = mContext.getResources().getInteger(
com.android.internal.R.integer.config_wifi_supplicant_scan_interval); R.integer.config_wifi_supplicant_scan_interval);
mSupplicantScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(), mSupplicantScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS, Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
@@ -3486,7 +3492,7 @@ public class WifiStateMachine extends StateMachine {
* The scans are useful to notify the user of the presence of an open network. * The scans are useful to notify the user of the presence of an open network.
* Note that these are not wake up scans. * Note that these are not wake up scans.
*/ */
if (mWifiConfigStore.getConfiguredNetworks().size() == 0) { if (!mP2pConnected.get() && mWifiConfigStore.getConfiguredNetworks().size() == 0) {
sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN, sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
++mPeriodicScanToken, 0), mSupplicantScanIntervalMs); ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
} }
@@ -3497,6 +3503,7 @@ public class WifiStateMachine extends StateMachine {
boolean ret = HANDLED; boolean ret = HANDLED;
switch (message.what) { switch (message.what) {
case CMD_NO_NETWORKS_PERIODIC_SCAN: case CMD_NO_NETWORKS_PERIODIC_SCAN:
if (mP2pConnected.get()) break;
if (message.arg1 == mPeriodicScanToken && if (message.arg1 == mPeriodicScanToken &&
mWifiConfigStore.getConfiguredNetworks().size() == 0) { mWifiConfigStore.getConfiguredNetworks().size() == 0) {
sendMessage(CMD_START_SCAN); sendMessage(CMD_START_SCAN);
@@ -3557,6 +3564,21 @@ public class WifiStateMachine extends StateMachine {
/* Handled in parent state */ /* Handled in parent state */
ret = NOT_HANDLED; ret = NOT_HANDLED;
break; break;
case WifiP2pService.P2P_CONNECTION_CHANGED:
NetworkInfo info = (NetworkInfo) message.obj;
mP2pConnected.set(info.isConnected());
if (mP2pConnected.get()) {
int defaultInterval = mContext.getResources().getInteger(
R.integer.config_wifi_scan_interval_p2p_connected);
long scanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
defaultInterval);
mWifiNative.setScanInterval((int) scanIntervalMs/1000);
} else if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
if (DBG) log("Turn on scanning after p2p disconnected");
sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
}
default: default:
ret = NOT_HANDLED; ret = NOT_HANDLED;
} }

View File

@@ -137,18 +137,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* Idle time after a peer is gone when the group is torn down */ /* Idle time after a peer is gone when the group is torn down */
private static final int GROUP_IDLE_TIME_S = 5; private static final int GROUP_IDLE_TIME_S = 5;
/**
* Delay between restarts upon failure to setup connection with supplicant
*/
private static final int P2P_RESTART_INTERVAL_MSECS = 5000;
/**
* Number of times we attempt to restart p2p
*/
private static final int P2P_RESTART_TRIES = 5;
private int mP2pRestartCount = 0;
private static final int BASE = Protocol.BASE_WIFI_P2P_SERVICE; private static final int BASE = Protocol.BASE_WIFI_P2P_SERVICE;
/* Delayed message to timeout group creation */ /* Delayed message to timeout group creation */
@@ -159,6 +147,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* User rejected a peer request */ /* User rejected a peer request */
private static final int PEER_CONNECTION_USER_REJECT = BASE + 3; private static final int PEER_CONNECTION_USER_REJECT = BASE + 3;
/* Commands to the WifiStateMachine */
public static final int P2P_CONNECTION_CHANGED = BASE + 11;
private final boolean mP2pSupported; private final boolean mP2pSupported;
private WifiP2pDevice mThisDevice = new WifiP2pDevice(); private WifiP2pDevice mThisDevice = new WifiP2pDevice();
@@ -1597,6 +1588,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO, new WifiP2pInfo(mWifiP2pInfo)); intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO, new WifiP2pInfo(mWifiP2pInfo));
intent.putExtra(WifiP2pManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo)); intent.putExtra(WifiP2pManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo));
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
mWifiChannel.sendMessage(WifiP2pService.P2P_CONNECTION_CHANGED,
new NetworkInfo(mNetworkInfo));
} }
private void sendP2pPersistentGroupsChangedBroadcast() { private void sendP2pPersistentGroupsChangedBroadcast() {