Merge "Move bitmap recycle to onDestroy()" into qt-dev

am: 72a162a17c

Change-Id: I32ba09bd99cf35669378b5febb0bdb328bfec19e
This commit is contained in:
Lei Yu
2019-04-09 17:21:41 -07:00
committed by android-build-merger
2 changed files with 20 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.BatteryMeterView; import com.android.settings.fuelgauge.BatteryMeterView;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop; import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.utils.ThreadUtils;
@@ -54,7 +55,7 @@ import java.util.Map;
* This class adds a header with device name and status (connected/disconnected, etc.). * This class adds a header with device name and status (connected/disconnected, etc.).
*/ */
public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceController implements public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceController implements
LifecycleObserver, OnStart, OnStop, CachedBluetoothDevice.Callback { LifecycleObserver, OnStart, OnStop, OnDestroy, CachedBluetoothDevice.Callback {
private static final String TAG = "AdvancedBtHeaderCtrl"; private static final String TAG = "AdvancedBtHeaderCtrl";
@VisibleForTesting @VisibleForTesting
@@ -118,7 +119,13 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
} }
mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged); mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged);
mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice()); mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice());
}
@Override
public void onDestroy() {
if (!isAvailable()) {
return;
}
// Destroy icon bitmap associated with this header // Destroy icon bitmap associated with this header
for (Bitmap bitmap : mIconCache.values()) { for (Bitmap bitmap : mIconCache.values()) {
if (bitmap != null) { if (bitmap != null) {

View File

@@ -209,6 +209,18 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{
verify(mBluetoothAdapter, never()).unregisterMetadataListener(mBluetoothDevice); verify(mBluetoothAdapter, never()).unregisterMetadataListener(mBluetoothDevice);
} }
@Test
public void onDestroy_isAvailable_recycleBitmap() {
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
.thenReturn("true");
mController.mIconCache.put(ICON_URI, mBitmap);
mController.onDestroy();
assertThat(mController.mIconCache).isEmpty();
verify(mBitmap).recycle();
}
private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) { private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) {
final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary); final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary);
assertThat(textView.getText().toString()).isEqualTo( assertThat(textView.getText().toString()).isEqualTo(