Merge "Preventing system crash when pin slice fails" into qt-r1-dev

This commit is contained in:
TreeHugger Robot
2019-07-25 21:14:34 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 2 deletions

View File

@@ -188,7 +188,7 @@ public class PinnedSliceState {
b.putParcelable(SliceProvider.EXTRA_BIND_URI, mUri); b.putParcelable(SliceProvider.EXTRA_BIND_URI, mUri);
try { try {
client.call(SliceProvider.METHOD_PIN, null, b); client.call(SliceProvider.METHOD_PIN, null, b);
} catch (RemoteException e) { } catch (Exception e) {
Log.w(TAG, "Unable to contact " + mUri, e); Log.w(TAG, "Unable to contact " + mUri, e);
} }
} }
@@ -201,7 +201,7 @@ public class PinnedSliceState {
b.putParcelable(SliceProvider.EXTRA_BIND_URI, mUri); b.putParcelable(SliceProvider.EXTRA_BIND_URI, mUri);
try { try {
client.call(SliceProvider.METHOD_UNPIN, null, b); client.call(SliceProvider.METHOD_UNPIN, null, b);
} catch (RemoteException e) { } catch (Exception e) {
Log.w(TAG, "Unable to contact " + mUri, e); Log.w(TAG, "Unable to contact " + mUri, e);
} }
} }

View File

@@ -7,10 +7,12 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -159,4 +161,25 @@ public class PinnedSliceStateTest extends UiServiceTestCase {
verify(mSliceService).removePinnedSlice(eq(TEST_URI)); verify(mSliceService).removePinnedSlice(eq(TEST_URI));
assertFalse(mPinnedSliceManager.hasPinOrListener()); assertFalse(mPinnedSliceManager.hasPinOrListener());
} }
@Test
public void testPinFailed() throws Exception {
// Throw exception when trying to pin
doAnswer(invocation -> {
throw new Exception("Pin failed");
}).when(mIContentProvider).call(
anyString(), anyString(), anyString(), eq(null), any());
TestableLooper.get(this).processAllMessages();
// When pinned for the first time, a pinned message should be sent.
mPinnedSliceManager.pin("pkg", FIRST_SPECS, mToken);
TestableLooper.get(this).processAllMessages();
verify(mIContentProvider).call(anyString(), anyString(), eq(SliceProvider.METHOD_PIN),
eq(null), argThat(b -> {
assertEquals(TEST_URI, b.getParcelable(SliceProvider.EXTRA_BIND_URI));
return true;
}));
}
} }