Merge "Fix Bluetooth device details crash on screen rotation" into oc-dr1-dev am: 6d50576496
am: 5438319677
Change-Id: I1595e3c80b731a4c7f86faa198f2cc6e7f05d710
This commit is contained in:
@@ -22,6 +22,7 @@ import android.support.v14.preference.PreferenceFragment;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.applications.LayoutPreference;
|
||||
import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
@@ -31,6 +32,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
* This class adds a header with device name and status (connected/disconnected, etc.).
|
||||
*/
|
||||
public class BluetoothDetailsHeaderController extends BluetoothDetailsController {
|
||||
private static final String KEY_DEVICE_HEADER = "bluetooth_device_header";
|
||||
|
||||
private EntityHeaderController mHeaderController;
|
||||
|
||||
@@ -41,10 +43,11 @@ public class BluetoothDetailsHeaderController extends BluetoothDetailsController
|
||||
|
||||
@Override
|
||||
protected void init(PreferenceScreen screen) {
|
||||
final LayoutPreference headerPreference =
|
||||
(LayoutPreference) screen.findPreference(KEY_DEVICE_HEADER);
|
||||
mHeaderController = EntityHeaderController.newInstance(mFragment.getActivity(), mFragment,
|
||||
null);
|
||||
LayoutPreference pref = mHeaderController.done(mFragment.getActivity(), mContext);
|
||||
screen.addPreference(pref);
|
||||
headerPreference.findViewById(R.id.entity_header));
|
||||
screen.addPreference(headerPreference);
|
||||
}
|
||||
|
||||
protected void setHeaderProperties() {
|
||||
@@ -66,6 +69,6 @@ public class BluetoothDetailsHeaderController extends BluetoothDetailsController
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return EntityHeaderController.PREF_KEY_APP_HEADER;
|
||||
return KEY_DEVICE_HEADER;
|
||||
}
|
||||
}
|
||||
|
@@ -45,7 +45,7 @@ public class BluetoothDetailsMacAddressController extends BluetoothDetailsContro
|
||||
protected void init(PreferenceScreen screen) {
|
||||
mFooterPreference = mFooterPreferenceMixin.createFooterPreference();
|
||||
mFooterPreference.setTitle(mContext.getString(
|
||||
R.string.bluetooth_device_mac_address, mCachedDevice.getDevice().getAddress()));
|
||||
R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -44,6 +44,22 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
@VisibleForTesting
|
||||
static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST;
|
||||
|
||||
/**
|
||||
* An interface to let tests override the normal mechanism for looking up the
|
||||
* CachedBluetoothDevice and LocalBluetoothManager, and substitute their own mocks instead.
|
||||
* This is only needed in situations where you instantiate the fragment indirectly (eg via an
|
||||
* intent) and can't use something like spying on an instance you construct directly via
|
||||
* newInstance.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
interface TestDataFactory {
|
||||
CachedBluetoothDevice getDevice(String deviceAddress);
|
||||
LocalBluetoothManager getManager(Context context);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static TestDataFactory sTestDataFactory;
|
||||
|
||||
private String mDeviceAddress;
|
||||
private LocalBluetoothManager mManager;
|
||||
private CachedBluetoothDevice mCachedDevice;
|
||||
@@ -54,11 +70,17 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
|
||||
@VisibleForTesting
|
||||
LocalBluetoothManager getLocalBluetoothManager(Context context) {
|
||||
if (sTestDataFactory != null) {
|
||||
return sTestDataFactory.getManager(context);
|
||||
}
|
||||
return Utils.getLocalBtManager(context);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
CachedBluetoothDevice getCachedDevice(String deviceAddress) {
|
||||
if (sTestDataFactory != null) {
|
||||
return sTestDataFactory.getDevice(deviceAddress);
|
||||
}
|
||||
BluetoothDevice remoteDevice =
|
||||
mManager.getBluetoothAdapter().getRemoteDevice(deviceAddress);
|
||||
return mManager.getCachedDeviceManager().findDevice(remoteDevice);
|
||||
|
Reference in New Issue
Block a user