Bind service in onCreate
This cl puts the binding to onCreate instead of constructor, so
preference controller won't bind/unbind service without registering
Lifecycle.
Bug: 62105045
Test: RunSettingsRoboTests
Change-Id: I1e60d4b6ad7270aa5d04b7ec9fae1d3200fccc5f
Merged-In: I1e60d4b6ad7270aa5d04b7ec9fae1d3200fccc5f
diff --git a/src/com/android/settings/network/TetherPreferenceController.java b/src/com/android/settings/network/TetherPreferenceController.java
index 31a8526..b865ea5 100644
--- a/src/com/android/settings/network/TetherPreferenceController.java
+++ b/src/com/android/settings/network/TetherPreferenceController.java
@@ -25,6 +25,7 @@
import android.database.ContentObserver;
import android.net.ConnectivityManager;
import android.net.Uri;
+import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
@@ -37,6 +38,7 @@
import com.android.settings.core.PreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
@@ -44,11 +46,12 @@
import java.util.concurrent.atomic.AtomicReference;
import static android.os.UserManager.DISALLOW_CONFIG_TETHERING;
+
import static com.android.settingslib.RestrictedLockUtils.checkIfRestrictionEnforced;
import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
public class TetherPreferenceController extends PreferenceController
- implements LifecycleObserver, OnResume, OnPause, OnDestroy {
+ implements LifecycleObserver, OnCreate, OnResume, OnPause, OnDestroy {
private static final String KEY_TETHER_SETTINGS = "tether_settings";
@@ -56,7 +59,8 @@
private final AtomicReference<BluetoothPan> mBluetoothPan;
private final ConnectivityManager mConnectivityManager;
private final BluetoothAdapter mBluetoothAdapter;
- private final BluetoothProfile.ServiceListener mBtProfileServiceListener =
+ @VisibleForTesting
+ final BluetoothProfile.ServiceListener mBtProfileServiceListener =
new android.bluetooth.BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
mBluetoothPan.set((BluetoothPan) proxy);
@@ -92,10 +96,6 @@
if (lifecycle != null) {
lifecycle.addObserver(this);
}
- if (mBluetoothAdapter != null) {
- mBluetoothAdapter.getProfileProxy(context, mBtProfileServiceListener,
- BluetoothProfile.PAN);
- }
}
@Override
@@ -131,6 +131,14 @@
}
@Override
+ public void onCreate(Bundle savedInstanceState) {
+ if (mBluetoothAdapter != null) {
+ mBluetoothAdapter.getProfileProxy(mContext, mBtProfileServiceListener,
+ BluetoothProfile.PAN);
+ }
+ }
+
+ @Override
public void onResume() {
if (mAirplaneModeObserver == null) {
mAirplaneModeObserver = new SettingObserver();
@@ -139,7 +147,7 @@
mTetherReceiver = new TetherBroadcastReceiver();
}
mContext.registerReceiver(
- mTetherReceiver, new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED));
+ mTetherReceiver, new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED));
mContext.getContentResolver()
.registerContentObserver(mAirplaneModeObserver.uri, false, mAirplaneModeObserver);
}
diff --git a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
index 4ae8c2c..b8a6d28 100644
--- a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
@@ -16,7 +16,6 @@
package com.android.settings.network;
-
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothPan;
import android.bluetooth.BluetoothProfile;
@@ -78,6 +77,14 @@
}
@Test
+ public void lifeCycle_onCreate_shouldInitBluetoothPan() {
+ mController.onCreate(null);
+
+ verify(mBluetoothAdapter).getProfileProxy(mContext, mController.mBtProfileServiceListener,
+ BluetoothProfile.PAN);
+ }
+
+ @Test
public void goThroughLifecycle_shouldDestoryBluetoothProfile() {
final BluetoothPan pan = mock(BluetoothPan.class);
final AtomicReference<BluetoothPan> panRef =
@@ -161,7 +168,8 @@
mController.onResume();
verify(mContext).registerReceiver(
- any(TetherPreferenceController.TetherBroadcastReceiver.class), any(IntentFilter.class));
+ any(TetherPreferenceController.TetherBroadcastReceiver.class),
+ any(IntentFilter.class));
}
@Test
@@ -172,7 +180,7 @@
mController.onPause();
verify(mContext).unregisterReceiver(
- any(TetherPreferenceController.TetherBroadcastReceiver.class));
+ any(TetherPreferenceController.TetherBroadcastReceiver.class));
}
@Test