OSDN Git Service

Bind service in onCreate
authorjackqdyulei <jackqdyulei@google.com>
Mon, 10 Jul 2017 20:22:50 +0000 (13:22 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Tue, 11 Jul 2017 17:52:06 +0000 (10:52 -0700)
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

src/com/android/settings/network/TetherPreferenceController.java
tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java

index 0229056..802b21e 100644 (file)
@@ -25,6 +25,7 @@ import android.content.IntentFilter;
 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;
@@ -38,6 +39,7 @@ import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.AbstractPreferenceController;
 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;
@@ -45,11 +47,12 @@ import com.android.settingslib.core.lifecycle.events.OnResume;
 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 AbstractPreferenceController
-        implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause, OnDestroy {
+public class TetherPreferenceController extends AbstractPreferenceController implements
+        PreferenceControllerMixin, LifecycleObserver, OnCreate, OnResume, OnPause, OnDestroy {
 
     private static final String KEY_TETHER_SETTINGS = "tether_settings";
 
@@ -57,7 +60,8 @@ public class TetherPreferenceController extends AbstractPreferenceController
     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);
@@ -93,10 +97,6 @@ public class TetherPreferenceController extends AbstractPreferenceController
         if (lifecycle != null) {
             lifecycle.addObserver(this);
         }
-        if (mBluetoothAdapter != null) {
-            mBluetoothAdapter.getProfileProxy(context, mBtProfileServiceListener,
-                    BluetoothProfile.PAN);
-        }
     }
 
     @Override
@@ -132,6 +132,14 @@ public class TetherPreferenceController extends AbstractPreferenceController
     }
 
     @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();
@@ -140,7 +148,7 @@ public class TetherPreferenceController extends AbstractPreferenceController
             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);
     }
index 4ae8c2c..b8a6d28 100644 (file)
@@ -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 @@ public class TetherPreferenceControllerTest {
     }
 
     @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 @@ public class TetherPreferenceControllerTest {
         mController.onResume();
 
         verify(mContext).registerReceiver(
-            any(TetherPreferenceController.TetherBroadcastReceiver.class), any(IntentFilter.class));
+                any(TetherPreferenceController.TetherBroadcastReceiver.class),
+                any(IntentFilter.class));
     }
 
     @Test
@@ -172,7 +180,7 @@ public class TetherPreferenceControllerTest {
         mController.onPause();
 
         verify(mContext).unregisterReceiver(
-            any(TetherPreferenceController.TetherBroadcastReceiver.class));
+                any(TetherPreferenceController.TetherBroadcastReceiver.class));
     }
 
     @Test