Merge "Fix QSCarrierGroup click listeners" into tm-qpr-dev am: bbf7246779

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19396066

Change-Id: I0a168ce65111bbbf641644b005692d98ca4bd83b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-08-01 21:30:04 +00:00
committed by Automerger Merge Worker
2 changed files with 71 additions and 2 deletions

View File

@@ -243,7 +243,7 @@ public class QSCarrierGroupController {
mActivityStarter.postStartActivityDismissingKeyguard(
new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
};
view.setOnClickListener(onClickListener);
mNoSimTextView = view.getNoSimTextView();
mNoSimTextView.setOnClickListener(onClickListener);
mMainHandler = new H(mainLooper, this::handleUpdateCarrierInfo, this::handleUpdateState);

View File

@@ -16,19 +16,26 @@
package com.android.systemui.qs.carrier;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.View;
@@ -50,6 +57,7 @@ import com.android.systemui.utils.os.FakeHandler;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -85,6 +93,7 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
private QSCarrierGroupController.OnSingleCarrierChangedListener mOnSingleCarrierChangedListener;
private FakeSlotIndexResolver mSlotIndexResolver;
private ClickListenerTextView mNoCarrierTextView;
@Before
public void setup() throws Exception {
@@ -108,7 +117,8 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
.when(mCarrierTextManager)
.setListening(any(CarrierTextManager.CarrierTextCallback.class));
when(mQSCarrierGroup.getNoSimTextView()).thenReturn(new TextView(mContext));
mNoCarrierTextView = new ClickListenerTextView(mContext);
when(mQSCarrierGroup.getNoSimTextView()).thenReturn(mNoCarrierTextView);
when(mQSCarrierGroup.getCarrier1View()).thenReturn(mQSCarrier1);
when(mQSCarrierGroup.getCarrier2View()).thenReturn(mQSCarrier2);
when(mQSCarrierGroup.getCarrier3View()).thenReturn(mQSCarrier3);
@@ -376,6 +386,47 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
verify(mOnSingleCarrierChangedListener, never()).onSingleCarrierChanged(anyBoolean());
}
@Test
public void testOnlyInternalViewsHaveClickableListener() {
ArgumentCaptor<View.OnClickListener> captor =
ArgumentCaptor.forClass(View.OnClickListener.class);
verify(mQSCarrier1).setOnClickListener(captor.capture());
verify(mQSCarrier2).setOnClickListener(captor.getValue());
verify(mQSCarrier3).setOnClickListener(captor.getValue());
assertThat(mNoCarrierTextView.getOnClickListener()).isSameInstanceAs(captor.getValue());
verify(mQSCarrierGroup, never()).setOnClickListener(any());
}
@Test
public void testOnClickListenerDoesntStartActivityIfViewNotVisible() {
ArgumentCaptor<View.OnClickListener> captor =
ArgumentCaptor.forClass(View.OnClickListener.class);
verify(mQSCarrier1).setOnClickListener(captor.capture());
when(mQSCarrier1.isVisibleToUser()).thenReturn(false);
captor.getValue().onClick(mQSCarrier1);
verifyZeroInteractions(mActivityStarter);
}
@Test
public void testOnClickListenerLaunchesActivityIfViewVisible() {
ArgumentCaptor<View.OnClickListener> listenerCaptor =
ArgumentCaptor.forClass(View.OnClickListener.class);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mQSCarrier1).setOnClickListener(listenerCaptor.capture());
when(mQSCarrier1.isVisibleToUser()).thenReturn(true);
listenerCaptor.getValue().onClick(mQSCarrier1);
verify(mActivityStarter)
.postStartActivityDismissingKeyguard(intentCaptor.capture(), anyInt());
assertThat(intentCaptor.getValue().getAction())
.isEqualTo(Settings.ACTION_WIRELESS_SETTINGS);
}
private class FakeSlotIndexResolver implements QSCarrierGroupController.SlotIndexResolver {
public boolean overrideInvalid;
@@ -384,4 +435,22 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
return overrideInvalid ? -1 : subscriptionId;
}
}
private class ClickListenerTextView extends TextView {
View.OnClickListener mListener = null;
ClickListenerTextView(Context context) {
super(context);
}
@Override
public void setOnClickListener(OnClickListener l) {
super.setOnClickListener(l);
mListener = l;
}
View.OnClickListener getOnClickListener() {
return mListener;
}
}
}