Merge "Remove NFC Slice jank"
This commit is contained in:
committed by
Android (Google) Code Review
commit
3329ead489
@@ -19,10 +19,13 @@ package com.android.settings.nfc;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.nfc.NfcManager;
|
||||
import android.os.UserManager;
|
||||
@@ -31,6 +34,10 @@ import android.provider.Settings;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.settings.nfc.NfcPreferenceController.NfcSliceWorker;
|
||||
import com.android.settings.nfc.NfcPreferenceController.NfcSliceWorker.NfcUpdateReceiver;
|
||||
import com.android.settings.slices.SliceBuilderUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -246,4 +253,67 @@ public class NfcPreferenceControllerTest {
|
||||
|
||||
assertThat(mNfcController.mAirplaneModeObserver).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ncfSliceWorker_nfcBroadcast_noExtra_sliceDoesntUpdate() {
|
||||
final NfcSliceWorker worker = spy(new NfcSliceWorker(mContext, getDummyUri()));
|
||||
final NfcUpdateReceiver receiver = worker.new NfcUpdateReceiver(worker);
|
||||
final Intent triggerIntent = new Intent(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
|
||||
receiver.onReceive(mContext, triggerIntent);
|
||||
|
||||
verify(worker, times(0)).updateSlice();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ncfSliceWorker_nfcBroadcast_turningOn_sliceDoesntUpdate() {
|
||||
final NfcSliceWorker worker = spy(new NfcSliceWorker(mContext, getDummyUri()));
|
||||
final NfcUpdateReceiver receiver = worker.new NfcUpdateReceiver(worker);
|
||||
final Intent triggerIntent = new Intent(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
triggerIntent.putExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_TURNING_ON);
|
||||
|
||||
receiver.onReceive(mContext, triggerIntent);
|
||||
|
||||
verify(worker, times(0)).updateSlice();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ncfSliceWorker_nfcBroadcast_turningOff_sliceDoesntUpdate() {
|
||||
final NfcSliceWorker worker = spy(new NfcSliceWorker(mContext, getDummyUri()));
|
||||
final NfcUpdateReceiver receiver = worker.new NfcUpdateReceiver(worker);
|
||||
final Intent triggerIntent = new Intent(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
triggerIntent.putExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_TURNING_OFF);
|
||||
|
||||
receiver.onReceive(mContext, triggerIntent);
|
||||
|
||||
verify(worker, times(0)).updateSlice();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ncfSliceWorker_nfcBroadcast_nfcOn_sliceUpdates() {
|
||||
final NfcSliceWorker worker = spy(new NfcSliceWorker(mContext, getDummyUri()));
|
||||
final NfcUpdateReceiver receiver = worker.new NfcUpdateReceiver(worker);
|
||||
final Intent triggerIntent = new Intent(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
triggerIntent.putExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_ON);
|
||||
|
||||
receiver.onReceive(mContext, triggerIntent);
|
||||
|
||||
verify(worker).updateSlice();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ncfSliceWorker_nfcBroadcast_nfcOff_sliceUpdates() {
|
||||
final NfcSliceWorker worker = spy(new NfcSliceWorker(mContext, getDummyUri()));
|
||||
final NfcUpdateReceiver receiver = worker.new NfcUpdateReceiver(worker);
|
||||
final Intent triggerIntent = new Intent(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||
triggerIntent.putExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_OFF);
|
||||
|
||||
receiver.onReceive(mContext, triggerIntent);
|
||||
|
||||
verify(worker).updateSlice();
|
||||
}
|
||||
|
||||
private Uri getDummyUri() {
|
||||
return SliceBuilderUtils.getUri("action/nfc", false);
|
||||
}
|
||||
}
|
||||
|
@@ -64,6 +64,7 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
@@ -183,6 +184,20 @@ public class SettingsSliceProviderTest {
|
||||
verify(mProvider).registerIntentToUri(eq(FakeToggleController.INTENT_FILTER), eq(uri));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadSlice_registersBackgroundListener() {
|
||||
insertSpecialCase(KEY);
|
||||
final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
|
||||
|
||||
mProvider.loadSlice(uri);
|
||||
|
||||
Robolectric.flushForegroundThreadScheduler();
|
||||
Robolectric.flushBackgroundThreadScheduler();
|
||||
|
||||
assertThat(mProvider.mPinnedWorkers.get(uri).getClass())
|
||||
.isEqualTo(FakeToggleController.TestWorker.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadSlice_doesNotCacheWithoutPin() {
|
||||
insertSpecialCase(KEY);
|
||||
|
@@ -19,10 +19,14 @@ package com.android.settings.testutils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.Uri;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.core.TogglePreferenceController;
|
||||
import com.android.settings.slices.SliceBackgroundWorker;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class FakeToggleController extends TogglePreferenceController {
|
||||
|
||||
@@ -70,6 +74,11 @@ public class FakeToggleController extends TogglePreferenceController {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
|
||||
return TestWorker.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAsyncUpdate() {
|
||||
return mIsAsyncUpdate;
|
||||
@@ -78,4 +87,23 @@ public class FakeToggleController extends TogglePreferenceController {
|
||||
public void setAsyncUpdate(boolean isAsyncUpdate) {
|
||||
mIsAsyncUpdate = isAsyncUpdate;
|
||||
}
|
||||
|
||||
public static class TestWorker extends SliceBackgroundWorker<Void> {
|
||||
|
||||
public TestWorker(Context context, Uri uri) {
|
||||
super(context, uri);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSlicePinned() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSliceUnpinned() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user