[SystemUI] 1.Remove the unnecessary log 2. update signal icon in bg thread

1. The log should be controlled by the DEBUG, otherwise it will be printed infinitely and the performance will be very slow.
The log can be removed after checking, so I removing it instead of adding the DEBUG tag.

2. Do too much get icon in the main thread, move it into bg thread

3. It is unnecessary that update the mobile data layout from the callback, onAccessPointsChanged, because it is used for Wi-Fi.

Bug: 201200079
Test: manual and Q verified pass
Change-Id: I5f4623f9ffb68fae6ca377625aaa039f0f33dd38
This commit is contained in:
Zoey Chen
2021-10-12 04:14:53 +00:00
parent 7de25b844e
commit 5f685c98cc
4 changed files with 79 additions and 41 deletions

View File

@@ -66,11 +66,13 @@ import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.accessibility.floatingmenu.AnnotationLinkSpan;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.wifitrackerlib.WifiEntry;
import java.util.List;
import java.util.concurrent.Executor;
/**
* Dialog for showing mobile network, connected Wi-Fi network and Wi-Fi networks.
@@ -84,6 +86,7 @@ public class InternetDialog extends SystemUIDialog implements
static final long PROGRESS_DELAY_MS = 2000L;
private final Handler mHandler;
private final Executor mBackgroundExecutor;
private final LinearLayoutManager mLayoutManager;
@VisibleForTesting
@@ -158,13 +161,14 @@ public class InternetDialog extends SystemUIDialog implements
public InternetDialog(Context context, InternetDialogFactory internetDialogFactory,
InternetDialogController internetDialogController, boolean canConfigMobileData,
boolean canConfigWifi, boolean aboveStatusBar, UiEventLogger uiEventLogger,
@Main Handler handler) {
@Main Handler handler, @Background Executor executor) {
super(context, R.style.Theme_SystemUI_Dialog_Internet);
if (DEBUG) {
Log.d(TAG, "Init InternetDialog");
}
mContext = context;
mHandler = handler;
mBackgroundExecutor = executor;
mInternetDialogFactory = internetDialogFactory;
mInternetDialogController = internetDialogController;
mSubscriptionManager = mInternetDialogController.getSubscriptionManager();
@@ -299,7 +303,13 @@ public class InternetDialog extends SystemUIDialog implements
dismiss();
}
void updateDialog() {
/**
* Update the internet dialog when receiving the callback.
*
* @param shouldUpdateMobileNetwork {@code true} for update the mobile network layout,
* otherwise {@code false}.
*/
void updateDialog(boolean shouldUpdateMobileNetwork) {
if (DEBUG) {
Log.d(TAG, "updateDialog");
}
@@ -309,8 +319,10 @@ public class InternetDialog extends SystemUIDialog implements
mInternetDialogSubTitle.setText(getSubtitleText());
}
updateEthernet();
setMobileDataLayout(mInternetDialogController.activeNetworkIsCellular()
|| mInternetDialogController.isCarrierNetworkActive());
if (shouldUpdateMobileNetwork) {
setMobileDataLayout(mInternetDialogController.activeNetworkIsCellular()
|| mInternetDialogController.isCarrierNetworkActive());
}
if (!mCanConfigWifi) {
return;
@@ -379,7 +391,13 @@ public class InternetDialog extends SystemUIDialog implements
} else {
mMobileSummaryText.setVisibility(View.GONE);
}
mSignalIcon.setImageDrawable(getSignalStrengthDrawable());
mBackgroundExecutor.execute(() -> {
Drawable drawable = getSignalStrengthDrawable();
mHandler.post(() -> {
mSignalIcon.setImageDrawable(drawable);
});
});
mMobileTitleText.setTextAppearance(isCarrierNetworkConnected
? R.style.TextAppearance_InternetDialog_Active
: R.style.TextAppearance_InternetDialog);
@@ -534,52 +552,57 @@ public class InternetDialog extends SystemUIDialog implements
@Override
public void onRefreshCarrierInfo() {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onSimStateChanged() {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
@WorkerThread
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
@WorkerThread
public void onLost(Network network) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onSubscriptionsChanged(int defaultDataSubId) {
mDefaultDataSubId = defaultDataSubId;
mTelephonyManager = mTelephonyManager.createForSubscriptionId(mDefaultDataSubId);
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onUserMobileDataStateChanged(boolean enabled) {
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
@WorkerThread
public void onDataConnectionStateChanged(int state, int networkType) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
mHandler.post(() -> updateDialog());
mHandler.post(() -> updateDialog(true /* shouldUpdateMobileNetwork */));
}
@Override
@@ -591,7 +614,7 @@ public class InternetDialog extends SystemUIDialog implements
mAdapter.setWifiEntries(wifiEntries, mWifiEntriesCount);
mHandler.post(() -> {
mAdapter.notifyDataSetChanged();
updateDialog();
updateDialog(false /* shouldUpdateMobileNetwork */);
});
}

View File

@@ -149,6 +149,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
private ConnectivityManager.NetworkCallback mConnectivityManagerNetworkCallback;
private WindowManager mWindowManager;
private ToastFactory mToastFactory;
private SignalDrawable mSignalDrawable;
@VisibleForTesting
static final float TOAST_PARAMS_HORIZONTAL_WEIGHT = 1.0f;
@@ -225,6 +226,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
mConnectivityManagerNetworkCallback = new DataConnectivityListener();
mWindowManager = windowManager;
mToastFactory = toastFactory;
mSignalDrawable = new SignalDrawable(mContext);
}
void onStart(@NonNull InternetDialogCallback callback, boolean canConfigWifi) {
@@ -431,10 +433,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
Drawable getSignalStrengthIcon(Context context, int level, int numLevels,
int iconType, boolean cutOut) {
Log.d(TAG, "getSignalStrengthIcon");
final SignalDrawable signalDrawable = new SignalDrawable(context);
signalDrawable.setLevel(
SignalDrawable.getState(level, numLevels, cutOut));
mSignalDrawable.setLevel(SignalDrawable.getState(level, numLevels, cutOut));
// Make the network type drawable
final Drawable networkDrawable =
@@ -443,7 +442,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
: context.getResources().getDrawable(iconType, context.getTheme());
// Overlay the two drawables
final Drawable[] layers = {networkDrawable, signalDrawable};
final Drawable[] layers = {networkDrawable, mSignalDrawable};
final int iconSize =
context.getResources().getDimensionPixelSize(R.dimen.signal_strength_icon_size);
@@ -892,7 +891,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
TelephonyCallback.DataConnectionStateListener,
TelephonyCallback.DisplayInfoListener,
TelephonyCallback.ServiceStateListener,
TelephonyCallback.SignalStrengthsListener {
TelephonyCallback.SignalStrengthsListener,
TelephonyCallback.UserMobileDataStateListener {
@Override
public void onServiceStateChanged(@NonNull ServiceState serviceState) {
@@ -914,6 +914,11 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
mTelephonyDisplayInfo = telephonyDisplayInfo;
mCallback.onDisplayInfoChanged(telephonyDisplayInfo);
}
@Override
public void onUserMobileDataStateChanged(boolean enabled) {
mCallback.onUserMobileDataStateChanged(enabled);
}
}
private class InternetOnSubscriptionChangedListener
@@ -1018,6 +1023,8 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
void onSignalStrengthsChanged(SignalStrength signalStrength);
void onUserMobileDataStateChanged(boolean enabled);
void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo);
void dismissDialog();

View File

@@ -20,7 +20,9 @@ import android.os.Handler
import android.util.Log
import com.android.internal.logging.UiEventLogger
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main
import java.util.concurrent.Executor
import javax.inject.Inject
private const val TAG = "InternetDialogFactory"
@@ -32,6 +34,7 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
@SysUISingleton
class InternetDialogFactory @Inject constructor(
@Main private val handler: Handler,
@Background private val executor: Executor,
private val internetDialogController: InternetDialogController,
private val context: Context,
private val uiEventLogger: UiEventLogger
@@ -49,7 +52,8 @@ class InternetDialogFactory @Inject constructor(
return
} else {
internetDialog = InternetDialog(context, this, internetDialogController,
canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler)
canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler,
executor)
internetDialog?.show()
}
}

View File

@@ -27,6 +27,8 @@ import androidx.test.filters.SmallTest;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.wifitrackerlib.WifiEntry;
import org.junit.After;
@@ -65,6 +67,7 @@ public class InternetDialogTest extends SysuiTestCase {
@Mock
private InternetDialogController mInternetDialogController;
private FakeExecutor mBgExecutor = new FakeExecutor(new FakeSystemClock());
private InternetDialog mInternetDialog;
private View mDialogView;
private View mSubTitle;
@@ -93,7 +96,8 @@ public class InternetDialogTest extends SysuiTestCase {
when(mInternetDialogController.getWifiManager()).thenReturn(mWifiManager);
mInternetDialog = new InternetDialog(mContext, mock(InternetDialogFactory.class),
mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler);
mInternetDialogController, true, true, true, mock(UiEventLogger.class), mHandler,
mBgExecutor);
mInternetDialog.mAdapter = mInternetAdapter;
mInternetDialog.onAccessPointsChanged(mWifiEntries, mInternetWifiEntry);
mInternetDialog.show();
@@ -129,7 +133,7 @@ public class InternetDialogTest extends SysuiTestCase {
public void updateDialog_withApmOn_internetDialogSubTitleGone() {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mSubTitle.getVisibility()).isEqualTo(View.GONE);
}
@@ -138,7 +142,7 @@ public class InternetDialogTest extends SysuiTestCase {
public void updateDialog_withApmOff_internetDialogSubTitleVisible() {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mSubTitle.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -148,7 +152,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false);
when(mInternetDialogController.hasEthernet()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mEthernet.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -158,7 +162,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(false);
when(mInternetDialogController.hasEthernet()).thenReturn(false);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mEthernet.getVisibility()).isEqualTo(View.GONE);
}
@@ -168,7 +172,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true);
when(mInternetDialogController.hasEthernet()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mEthernet.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -178,7 +182,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true);
when(mInternetDialogController.hasEthernet()).thenReturn(false);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mEthernet.getVisibility()).isEqualTo(View.GONE);
}
@@ -187,7 +191,7 @@ public class InternetDialogTest extends SysuiTestCase {
public void updateDialog_withApmOn_mobileDataLayoutGone() {
when(mInternetDialogController.isAirplaneModeEnabled()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(true);
assertThat(mMobileDataToggle.getVisibility()).isEqualTo(View.GONE);
}
@@ -197,7 +201,7 @@ public class InternetDialogTest extends SysuiTestCase {
// The preconditions WiFi ON and Internet WiFi are already in setUp()
doReturn(false).when(mInternetDialogController).activeNetworkIsCellular();
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -208,7 +212,7 @@ public class InternetDialogTest extends SysuiTestCase {
mInternetDialog.onAccessPointsChanged(mWifiEntries, null /* connectedEntry*/);
doReturn(false).when(mInternetDialogController).activeNetworkIsCellular();
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE);
}
@@ -218,7 +222,7 @@ public class InternetDialogTest extends SysuiTestCase {
// The precondition WiFi ON is already in setUp()
mInternetDialog.onAccessPointsChanged(null /* wifiEntries */, mInternetWifiEntry);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE);
assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE);
@@ -228,7 +232,7 @@ public class InternetDialogTest extends SysuiTestCase {
public void updateDialog_wifiOnAndHasWifiList_showWifiListAndSeeAll() {
// The preconditions WiFi ON and WiFi entries are already in setUp()
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiList.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mSeeAll.getVisibility()).isEqualTo(View.VISIBLE);
@@ -239,7 +243,7 @@ public class InternetDialogTest extends SysuiTestCase {
// The preconditions WiFi ON and Internet WiFi are already in setUp()
when(mInternetDialogController.isDeviceLocked()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiToggle.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mWifiToggle.getBackground()).isNotNull();
@@ -250,7 +254,7 @@ public class InternetDialogTest extends SysuiTestCase {
// The preconditions WiFi ON and Internet WiFi are already in setUp()
when(mInternetDialogController.isDeviceLocked()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mConnectedWifi.getVisibility()).isEqualTo(View.GONE);
}
@@ -260,7 +264,7 @@ public class InternetDialogTest extends SysuiTestCase {
// The preconditions WiFi entries are already in setUp()
when(mInternetDialogController.isDeviceLocked()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiList.getVisibility()).isEqualTo(View.GONE);
assertThat(mSeeAll.getVisibility()).isEqualTo(View.GONE);
@@ -270,7 +274,7 @@ public class InternetDialogTest extends SysuiTestCase {
public void updateDialog_wifiOn_hideWifiScanNotify() {
// The preconditions WiFi ON and Internet WiFi are already in setUp()
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE);
}
@@ -280,7 +284,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mWifiManager.isWifiEnabled()).thenReturn(false);
when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE);
}
@@ -291,7 +295,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true);
when(mInternetDialogController.isDeviceLocked()).thenReturn(true);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.GONE);
}
@@ -302,7 +306,7 @@ public class InternetDialogTest extends SysuiTestCase {
when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true);
when(mInternetDialogController.isDeviceLocked()).thenReturn(false);
mInternetDialog.updateDialog();
mInternetDialog.updateDialog(false);
assertThat(mWifiScanNotify.getVisibility()).isEqualTo(View.VISIBLE);
TextView wifiScanNotifyText = mDialogView.requireViewById(R.id.wifi_scan_notify_text);