Bluetooth: Use string in remote device summary

* Use String in connected device summary instead of resource id
* This allows dynamic strings to be built by CachedBluetoothDevice
  such as ones involve battery level percentages

Bug: 35874078
Test: make, unit test, test with Bluetooth devices
Change-Id: I583eac73280ca17387b215a4e7095e27de399998
This commit is contained in:
Jack He
2017-06-28 12:08:55 -07:00
parent 43d4fefb36
commit 04f5967c95
5 changed files with 29 additions and 27 deletions

View File

@@ -53,12 +53,11 @@ public class BluetoothDetailsHeaderController extends BluetoothDetailsController
protected void setHeaderProperties() { protected void setHeaderProperties() {
Pair<Integer, String> pair = Utils.getBtClassDrawableWithDescription Pair<Integer, String> pair = Utils.getBtClassDrawableWithDescription
(mContext.getResources(), mCachedDevice); (mContext.getResources(), mCachedDevice);
int summaryResourceId = mCachedDevice.getConnectionSummary(); String summaryText = mCachedDevice.getConnectionSummary();
mHeaderController.setLabel(mCachedDevice.getName()); mHeaderController.setLabel(mCachedDevice.getName());
mHeaderController.setIcon(mContext.getDrawable(pair.first)); mHeaderController.setIcon(mContext.getDrawable(pair.first));
mHeaderController.setIconContentDescription(pair.second); mHeaderController.setIconContentDescription(pair.second);
mHeaderController.setSummary( mHeaderController.setSummary(summaryText);
summaryResourceId > 0 ? mContext.getString(summaryResourceId) : null);
} }
@Override @Override

View File

@@ -117,14 +117,8 @@ public final class BluetoothDevicePreference extends GearPreference implements
* any preference info has changed from the previous value. * any preference info has changed from the previous value.
*/ */
setTitle(mCachedDevice.getName()); setTitle(mCachedDevice.getName());
// Null check is done at the framework
int summaryResId = mCachedDevice.getConnectionSummary(); setSummary(mCachedDevice.getConnectionSummary());
if (summaryResId != 0) {
setSummary(summaryResId);
} else {
setSummary(null); // empty summary for unpaired devices
}
Pair<Integer, String> pair = Utils.getBtClassDrawableWithDescription(mResources, Pair<Integer, String> pair = Utils.getBtClassDrawableWithDescription(mResources,
mCachedDevice); mCachedDevice);

View File

@@ -76,7 +76,7 @@ public class BluetoothDetailsControllerTestBase {
private String address; private String address;
private int majorDeviceClass; private int majorDeviceClass;
private boolean connected; private boolean connected;
private int connectionSummary; private String connectionSummary;
public DeviceConfig setName(String newValue) { public DeviceConfig setName(String newValue) {
this.name = newValue; this.name = newValue;
@@ -97,8 +97,8 @@ public class BluetoothDetailsControllerTestBase {
this.connected = newValue; this.connected = newValue;
return this; return this;
} }
public DeviceConfig setConnectionSummary(int newValue) { public DeviceConfig setConnectionSummary(String connectionSummary) {
this.connectionSummary = newValue; this.connectionSummary = connectionSummary;
return this; return this;
} }
@@ -118,18 +118,18 @@ public class BluetoothDetailsControllerTestBase {
return connected; return connected;
} }
public int getConnectionSummary() { public String getConnectionSummary() {
return connectionSummary; return connectionSummary;
} }
} }
protected static DeviceConfig makeDefaultDeviceConfig() { protected DeviceConfig makeDefaultDeviceConfig() {
return new DeviceConfig() return new DeviceConfig()
.setName("Mock Device") .setName("Mock Device")
.setAddress("B4:B0:34:B5:3B:1B") .setAddress("B4:B0:34:B5:3B:1B")
.setMajorDeviceClass(BluetoothClass.Device.Major.AUDIO_VIDEO) .setMajorDeviceClass(BluetoothClass.Device.Major.AUDIO_VIDEO)
.setConnected(true) .setConnected(true)
.setConnectionSummary(R.string.bluetooth_connected); .setConnectionSummary(mContext.getString(R.string.bluetooth_connected));
} }
/** /**

View File

@@ -16,6 +16,8 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
@@ -23,7 +25,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.v7.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.LayoutPreference;
@@ -33,7 +34,6 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.SettingsShadowBluetoothDevice; import com.android.settings.testutils.shadow.SettingsShadowBluetoothDevice;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import org.junit.After; import org.junit.After;
import org.junit.Test; import org.junit.Test;
@@ -43,8 +43,6 @@ import org.mockito.InOrder;
import org.mockito.Mock; import org.mockito.Mock;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
shadows={SettingsShadowBluetoothDevice.class, ShadowEntityHeaderController.class}) shadows={SettingsShadowBluetoothDevice.class, ShadowEntityHeaderController.class})
@@ -73,6 +71,15 @@ public class BluetoothDetailsHeaderControllerTest extends BluetoothDetailsContro
ShadowEntityHeaderController.reset(); ShadowEntityHeaderController.reset();
} }
/**
* Test to verify the current test context object works so that we are not checking null
* against null
*/
@Test
public void testContextMock() {
assertThat(mContext.getString(R.string.bluetooth_connected)).isEqualTo("Connected");
}
@Test @Test
public void header() { public void header() {
showScreen(mController); showScreen(mController);
@@ -86,17 +93,19 @@ public class BluetoothDetailsHeaderControllerTest extends BluetoothDetailsContro
@Test @Test
public void connectionStatusChangesWhileScreenOpen() { public void connectionStatusChangesWhileScreenOpen() {
ArrayList<LocalBluetoothProfile> profiles = new ArrayList<>();
InOrder inOrder = inOrder(mHeaderController); InOrder inOrder = inOrder(mHeaderController);
when(mCachedDevice.getConnectionSummary()).thenReturn(R.string.bluetooth_connected); when(mCachedDevice.getConnectionSummary()).thenReturn(
mContext.getString(R.string.bluetooth_connected));
showScreen(mController); showScreen(mController);
inOrder.verify(mHeaderController).setSummary(mContext.getString(R.string.bluetooth_connected)); inOrder.verify(mHeaderController).setSummary(
mContext.getString(R.string.bluetooth_connected));
when(mCachedDevice.getConnectionSummary()).thenReturn(0); when(mCachedDevice.getConnectionSummary()).thenReturn(null);
mController.onDeviceAttributesChanged(); mController.onDeviceAttributesChanged();
inOrder.verify(mHeaderController).setSummary((CharSequence) null); inOrder.verify(mHeaderController).setSummary((CharSequence) null);
when(mCachedDevice.getConnectionSummary()).thenReturn(R.string.bluetooth_connecting); when(mCachedDevice.getConnectionSummary()).thenReturn(
mContext.getString(R.string.bluetooth_connecting));
mController.onDeviceAttributesChanged(); mController.onDeviceAttributesChanged();
inOrder.verify(mHeaderController).setSummary( inOrder.verify(mHeaderController).setSummary(
mContext.getString(R.string.bluetooth_connecting)); mContext.getString(R.string.bluetooth_connecting));

View File

@@ -276,7 +276,7 @@ public class BluetoothDetailsProfilesControllerTest extends BluetoothDetailsCont
@Test @Test
public void disconnectedDeviceOneProfile() { public void disconnectedDeviceOneProfile() {
setupDevice(makeDefaultDeviceConfig().setConnected(false).setConnectionSummary(0)); setupDevice(makeDefaultDeviceConfig().setConnected(false).setConnectionSummary(null));
addFakeProfile(R.string.bluetooth_profile_a2dp, true); addFakeProfile(R.string.bluetooth_profile_a2dp, true);
showScreen(mController); showScreen(mController);
verifyProfileSwitchTitles(getProfileSwitches(true)); verifyProfileSwitchTitles(getProfileSwitches(true));