am 5565b5cd: Fix IndexOutOfBoundsException while silent provisioning check

* commit '5565b5cd7537e9360e6382507a45cf5e091a5108':
  Fix IndexOutOfBoundsException while silent provisioning check
This commit is contained in:
Hyejin
2015-09-15 00:29:32 +00:00
committed by Android Git Automerger
2 changed files with 38 additions and 22 deletions

View File

@@ -5,6 +5,7 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.util.Log;
import com.android.settingslib.TetherUtil; import com.android.settingslib.TetherUtil;
@@ -14,11 +15,15 @@ import com.android.settingslib.TetherUtil;
*/ */
public class HotspotOffReceiver extends BroadcastReceiver { public class HotspotOffReceiver extends BroadcastReceiver {
private static final String TAG = "HotspotOffReceiver";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) { if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (wifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_DISABLED) { if (wifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_DISABLED) {
if (DEBUG) Log.d(TAG, "TetherService.cancelRecheckAlarmIfNecessary called");
// The hotspot has been turned off, we don't need to recheck tethering. // The hotspot has been turned off, we don't need to recheck tethering.
TetherService.cancelRecheckAlarmIfNecessary(context, TetherUtil.TETHERING_WIFI); TetherService.cancelRecheckAlarmIfNecessary(context, TetherUtil.TETHERING_WIFI);
} }

View File

@@ -89,21 +89,28 @@ public class TetherService extends Service {
mCurrentTethers.add(type); mCurrentTethers.add(type);
} }
} }
if (intent.hasExtra(TetherUtil.EXTRA_REM_TETHER_TYPE)) { if (intent.hasExtra(TetherUtil.EXTRA_REM_TETHER_TYPE)) {
if (!mInProvisionCheck) {
int type = intent.getIntExtra(TetherUtil.EXTRA_REM_TETHER_TYPE, int type = intent.getIntExtra(TetherUtil.EXTRA_REM_TETHER_TYPE,
TetherUtil.TETHERING_INVALID); TetherUtil.TETHERING_INVALID);
if (DEBUG) Log.d(TAG, "Removing tether " + type);
int index = mCurrentTethers.indexOf(type); int index = mCurrentTethers.indexOf(type);
if (DEBUG) Log.d(TAG, "Removing tether " + type + ", index " + index);
if (index >= 0) { if (index >= 0) {
mCurrentTethers.remove(index); mCurrentTethers.remove(index);
// If we are currently in the middle of a check, we may need to adjust the // If we are currently in the middle of a check, we may need to adjust the
// index accordingly. // index accordingly.
if (DEBUG) Log.d(TAG, "mCurrentTypeIndex: " + mCurrentTypeIndex);
if (index <= mCurrentTypeIndex && mCurrentTypeIndex > 0) { if (index <= mCurrentTypeIndex && mCurrentTypeIndex > 0) {
mCurrentTypeIndex--; mCurrentTypeIndex--;
} }
} }
cancelAlarmIfNecessary(); cancelAlarmIfNecessary();
} else {
if (DEBUG) Log.d(TAG, "Don't cancel alarm during provisioning");
} }
}
// Only set the alarm if we have one tether, meaning the one just added, // Only set the alarm if we have one tether, meaning the one just added,
// to avoid setting it when it was already set previously for another // to avoid setting it when it was already set previously for another
// type. // type.
@@ -199,6 +206,7 @@ public class TetherService extends Service {
} }
private void startProvisioning(int index) { private void startProvisioning(int index) {
if (index < mCurrentTethers.size()) {
String provisionAction = getResources().getString( String provisionAction = getResources().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_app_no_ui); com.android.internal.R.string.config_mobile_hotspot_provision_app_no_ui);
if (DEBUG) Log.d(TAG, "Sending provisioning broadcast: " + provisionAction + " type: " if (DEBUG) Log.d(TAG, "Sending provisioning broadcast: " + provisionAction + " type: "
@@ -209,6 +217,7 @@ public class TetherService extends Service {
sendBroadcast(intent); sendBroadcast(intent);
mInProvisionCheck = true; mInProvisionCheck = true;
} }
}
public static void scheduleRecheckAlarm(Context context, int type) { public static void scheduleRecheckAlarm(Context context, int type) {
Intent intent = new Intent(context, TetherService.class); Intent intent = new Intent(context, TetherService.class);
@@ -261,13 +270,14 @@ public class TetherService extends Service {
if (DEBUG) Log.d(TAG, "Got provision result " + intent); if (DEBUG) Log.d(TAG, "Got provision result " + intent);
String provisionResponse = context.getResources().getString( String provisionResponse = context.getResources().getString(
com.android.internal.R.string.config_mobile_hotspot_provision_response); com.android.internal.R.string.config_mobile_hotspot_provision_response);
if (provisionResponse.equals(intent.getAction())) { if (provisionResponse.equals(intent.getAction())) {
if (!mInProvisionCheck) { if (!mInProvisionCheck) {
Log.e(TAG, "Unexpected provision response " + intent); Log.e(TAG, "Unexpected provision response " + intent);
return; return;
} }
mInProvisionCheck = false;
int checkType = mCurrentTethers.get(mCurrentTypeIndex); int checkType = mCurrentTethers.get(mCurrentTypeIndex);
mInProvisionCheck = false;
if (intent.getIntExtra(EXTRA_RESULT, RESULT_DEFAULT) == RESULT_OK) { if (intent.getIntExtra(EXTRA_RESULT, RESULT_DEFAULT) == RESULT_OK) {
if (checkType == TetherUtil.TETHERING_WIFI && mEnableWifiAfterCheck) { if (checkType == TetherUtil.TETHERING_WIFI && mEnableWifiAfterCheck) {
enableWifiTetheringIfNeeded(); enableWifiTetheringIfNeeded();
@@ -286,7 +296,8 @@ public class TetherService extends Service {
break; break;
} }
} }
if (++mCurrentTypeIndex == mCurrentTethers.size()) {
if (++mCurrentTypeIndex >= mCurrentTethers.size()) {
// We are done with all checks, time to die. // We are done with all checks, time to die.
stopSelf(); stopSelf();
} else { } else {