Merge "Show "Not available" summary when hotspot speed is unavailable" into udc-d1-dev am: a99c52e160 am: 34a254fc0c

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23601566

Change-Id: I1f9fa9e219f1192945824aa4b07c9149e8a2876f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-06-09 05:42:42 +00:00
committed by Automerger Merge Worker
5 changed files with 137 additions and 47 deletions

View File

@@ -623,9 +623,11 @@ public class WifiHotspotRepository {
@VisibleForTesting @VisibleForTesting
class SoftApCallback implements WifiManager.SoftApCallback { class SoftApCallback implements WifiManager.SoftApCallback {
private static final String TAG = "SoftApCallback";
@Override @Override
public void onStateChanged(int state, int failureReason) { public void onStateChanged(int state, int failureReason) {
log("onStateChanged(), state:" + state + ", failureReason:" + failureReason); Log.d(TAG, "onStateChanged(), state:" + state + ", failureReason:" + failureReason);
mWifiApState = state; mWifiApState = state;
if (!mIsRestarting) { if (!mIsRestarting) {
return; return;

View File

@@ -108,15 +108,17 @@ public class WifiHotspotSpeedSettings extends DashboardFragment implements
if (radioButton == null) { if (radioButton == null) {
continue; continue;
} }
if (radioButton.isChecked() != speedInfo.mIsChecked) { if (!speedInfo.mIsVisible) {
radioButton.setChecked(speedInfo.mIsChecked); radioButton.setVisible(false);
continue;
} }
if (radioButton.isEnabled() != speedInfo.mIsEnabled) { radioButton.setEnabled(speedInfo.mIsEnabled);
radioButton.setEnabled(speedInfo.mIsEnabled); radioButton.setChecked(speedInfo.mIsChecked);
} if (speedInfo.mSummary != null) {
if (radioButton.isVisible() != speedInfo.mIsVisible) { radioButton.setSummary(speedInfo.mSummary);
radioButton.setVisible(speedInfo.mIsVisible);
} }
// setVisible at the end to avoid UI flickering
radioButton.setVisible(true);
} }
} }

View File

@@ -22,12 +22,15 @@ import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_5
import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ; import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ;
import android.app.Application; import android.app.Application;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.repository.WifiHotspotRepository; import com.android.settings.wifi.repository.WifiHotspotRepository;
@@ -41,6 +44,12 @@ import java.util.Map;
*/ */
public class WifiHotspotSpeedViewModel extends AndroidViewModel { public class WifiHotspotSpeedViewModel extends AndroidViewModel {
private static final String TAG = "WifiHotspotSpeedViewModel"; private static final String TAG = "WifiHotspotSpeedViewModel";
@VisibleForTesting
static final int RES_SPEED_5G_SUMMARY = R.string.wifi_hotspot_speed_5g_summary;
@VisibleForTesting
static final int RES_SPEED_6G_SUMMARY = R.string.wifi_hotspot_speed_6g_summary;
@VisibleForTesting
static final int RES_SUMMARY_UNAVAILABLE = R.string.wifi_hotspot_speed_summary_unavailable;
protected final WifiHotspotRepository mWifiHotspotRepository; protected final WifiHotspotRepository mWifiHotspotRepository;
protected Map<Integer, SpeedInfo> mSpeedInfoMap = new HashMap<>(); protected Map<Integer, SpeedInfo> mSpeedInfoMap = new HashMap<>();
@@ -75,14 +84,18 @@ public class WifiHotspotSpeedViewModel extends AndroidViewModel {
} }
protected void on6gAvailableChanged(Boolean available) { protected void on6gAvailableChanged(Boolean available) {
log("on6gAvailableChanged(), available:" + available); Log.d(TAG, "on6gAvailableChanged(), available:" + available);
mSpeedInfo6g.mIsEnabled = available; mSpeedInfo6g.mIsEnabled = available;
mSpeedInfo6g.mSummary = getApplication()
.getString(available ? RES_SPEED_6G_SUMMARY : RES_SUMMARY_UNAVAILABLE);
updateSpeedInfoMapData(); updateSpeedInfoMapData();
} }
protected void on5gAvailableChanged(Boolean available) { protected void on5gAvailableChanged(Boolean available) {
log("on5gAvailableChanged(), available:" + available); Log.d(TAG, "on5gAvailableChanged(), available:" + available);
mSpeedInfo5g.mIsEnabled = available; mSpeedInfo5g.mIsEnabled = available;
mSpeedInfo5g.mSummary = getApplication()
.getString(available ? RES_SPEED_5G_SUMMARY : RES_SUMMARY_UNAVAILABLE);
boolean showDualBand = mWifiHotspotRepository.isDualBand() && available; boolean showDualBand = mWifiHotspotRepository.isDualBand() && available;
log("on5gAvailableChanged(), showDualBand:" + showDualBand); log("on5gAvailableChanged(), showDualBand:" + showDualBand);
@@ -144,6 +157,7 @@ public class WifiHotspotSpeedViewModel extends AndroidViewModel {
Boolean mIsChecked; Boolean mIsChecked;
boolean mIsEnabled; boolean mIsEnabled;
boolean mIsVisible; boolean mIsVisible;
String mSummary;
public SpeedInfo(boolean isChecked, boolean isEnabled, boolean isVisible) { public SpeedInfo(boolean isChecked, boolean isEnabled, boolean isVisible) {
this.mIsChecked = isChecked; this.mIsChecked = isChecked;
@@ -157,6 +171,7 @@ public class WifiHotspotSpeedViewModel extends AndroidViewModel {
.append("isChecked:").append(mIsChecked) .append("isChecked:").append(mIsChecked)
.append(",isEnabled:").append(mIsEnabled) .append(",isEnabled:").append(mIsEnabled)
.append(",isVisible:").append(mIsVisible) .append(",isVisible:").append(mIsVisible)
.append(",mSummary:").append(mSummary)
.append('}').toString(); .append('}').toString();
} }
} }

View File

@@ -25,8 +25,10 @@ import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEE
import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_5GHZ; import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_5GHZ;
import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_6GHZ; import static com.android.settings.wifi.tether.WifiHotspotSpeedSettings.KEY_SPEED_6GHZ;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.anyBoolean;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -89,98 +91,156 @@ public class WifiHotspotSpeedSettingsTest {
@Test @Test
public void onSpeedInfoMapDataChanged_checkedSpeed2g_checkedToRadioButton2g() { public void onSpeedInfoMapDataChanged_checkedSpeed2g_checkedToRadioButton2g() {
mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false); mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(true, false, true); mockRadioButton(false, false, false);
mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(false, true, false); verifyRadioButton(true, true, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_uncheckedSpeed2g_uncheckedToRadioButton2g() { public void onSpeedInfoMapDataChanged_uncheckedSpeed2g_uncheckedToRadioButton2g() {
mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true); mSpeedInfo2g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(false, true, false); mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(true, false, true); verifyRadioButton(false, false, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_checkedSpeed5g_checkedToRadioButton5g() { public void onSpeedInfoMapDataChanged_checkedSpeed5g_checkedToRadioButton5g() {
mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false); mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(true, false, true); mockRadioButton(false, false, false);
mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(false, true, false); verifyRadioButton(true, true, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_uncheckedSpeed5g_uncheckedToRadioButton5g() { public void onSpeedInfoMapDataChanged_uncheckedSpeed5g_uncheckedToRadioButton5g() {
mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true); mSpeedInfo5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(false, true, false); mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_5GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(true, false, true); verifyRadioButton(false, false, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_checkedSpeed2g5g_checkedToRadioButton2g5g() { public void onSpeedInfoMapDataChanged_checkedSpeed2g5g_checkedToRadioButton2g5g() {
mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false); mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(true, false, true); mockRadioButton(false, false, false);
mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(false, true, false); verifyRadioButton(true, true, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_uncheckedSpeed25g_uncheckedToRadioButton25g() { public void onSpeedInfoMapDataChanged_uncheckedSpeed2g5g_uncheckedToRadioButton2g5g() {
mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true); mSpeedInfo2g5g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(false, true, false); mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_2GHZ_5GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(true, false, true); verifyRadioButton(false, false, true);
} }
@Test @Test
public void onSpeedInfoMapDataChanged_checkedSpeed6g_checkedToRadioButton6g() { public void onSpeedInfoMapDataChanged_checkedSpeed6g_checkedToRadioButton6g() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(false, true, false); mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
updateSpeedInfoMap(); updateSpeedInfoMap();
mockRadioButton(false, false, false);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(true, true, true);
}
@Test
public void onSpeedInfoMapDataChanged_uncheckedSpeed6g_uncheckedToRadioButton6g() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(false, false, true);
updateSpeedInfoMap();
mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(false, false, true);
}
@Test
public void onSpeedInfoMapDataChanged_setVisibleFalse_setVisibleOnly() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, false);
mSpeedInfo6g.mSummary = "summary";
mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verify(mRadioButton).setVisible(false);
verify(mRadioButton, never()).setChecked(anyBoolean());
verify(mRadioButton, never()).setEnabled(anyBoolean());
verify(mRadioButton, never()).setSummary(anyString());
}
@Test
public void onSpeedInfoMapDataChanged_setVisibleTrue_setAllProperties() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
mSpeedInfo6g.mSummary = "summary";
mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verify(mRadioButton).setVisible(true);
verify(mRadioButton).setChecked(anyBoolean());
verify(mRadioButton).setEnabled(anyBoolean());
verify(mRadioButton).setSummary(anyString());
}
@Test
public void onSpeedInfoMapDataChanged_summaryIsNull_doNotSetSummary() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, true, true);
mSpeedInfo6g.mSummary = null;
mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
mockRadioButton(true, true, true);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verify(mRadioButton, never()).setSummary(anyString());
}
@Test
public void onSpeedInfoMapDataChanged_summaryNotNull_setSummary() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
mSpeedInfo6g.mSummary = "summary";
mSpeedInfoMap.put(SPEED_6GHZ, mSpeedInfo6g);
mockRadioButton(true, false, true); mockRadioButton(true, false, true);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton); mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap); mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(false, true, false); verify(mRadioButton).setSummary(mSpeedInfo6g.mSummary);
}
@Test
public void onSpeedInfoMapDataChanged_uncheckedSpeed6g_uncheckedToRadioButton6g() {
mSpeedInfo6g = new WifiHotspotSpeedViewModel.SpeedInfo(true, false, true);
updateSpeedInfoMap();
mockRadioButton(false, true, false);
mSettings.mSpeedPreferenceMap.put(SPEED_6GHZ, mRadioButton);
mSettings.onSpeedInfoMapDataChanged(mSpeedInfoMap);
verifyRadioButton(true, false, true);
} }
@Test @Test

View File

@@ -20,6 +20,9 @@ import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_2
import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_2GHZ_5GHZ; import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_2GHZ_5GHZ;
import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_5GHZ; import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_5GHZ;
import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ; import static com.android.settings.wifi.repository.WifiHotspotRepository.SPEED_6GHZ;
import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SPEED_5G_SUMMARY;
import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SPEED_6G_SUMMARY;
import static com.android.settings.wifi.tether.WifiHotspotSpeedViewModel.RES_SUMMARY_UNAVAILABLE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -128,7 +131,9 @@ public class WifiHotspotSpeedViewModelTest {
mViewModel.on6gAvailableChanged(true); mViewModel.on6gAvailableChanged(true);
verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap); verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
assertThat(mViewModel.mSpeedInfoMap.get(SPEED_6GHZ).mIsEnabled).isTrue(); WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_6GHZ);
assertThat(speedInfo.mIsEnabled).isTrue();
assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SPEED_6G_SUMMARY));
} }
@Test @Test
@@ -139,7 +144,9 @@ public class WifiHotspotSpeedViewModelTest {
mViewModel.on6gAvailableChanged(false); mViewModel.on6gAvailableChanged(false);
verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap); verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
assertThat(mViewModel.mSpeedInfoMap.get(SPEED_6GHZ).mIsEnabled).isFalse(); WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_6GHZ);
assertThat(speedInfo.mIsEnabled).isFalse();
assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SUMMARY_UNAVAILABLE));
} }
@Test @Test
@@ -150,7 +157,9 @@ public class WifiHotspotSpeedViewModelTest {
mViewModel.on5gAvailableChanged(true); mViewModel.on5gAvailableChanged(true);
verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap); verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
assertThat(mViewModel.mSpeedInfoMap.get(SPEED_5GHZ).mIsEnabled).isTrue(); WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_5GHZ);
assertThat(speedInfo.mIsEnabled).isTrue();
assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SPEED_5G_SUMMARY));
} }
@Test @Test
@@ -161,7 +170,9 @@ public class WifiHotspotSpeedViewModelTest {
mViewModel.on5gAvailableChanged(false); mViewModel.on5gAvailableChanged(false);
verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap); verify(mSpeedInfoMapData).setValue(mViewModel.mSpeedInfoMap);
assertThat(mViewModel.mSpeedInfoMap.get(SPEED_5GHZ).mIsEnabled).isFalse(); WifiHotspotSpeedViewModel.SpeedInfo speedInfo = mViewModel.mSpeedInfoMap.get(SPEED_5GHZ);
assertThat(speedInfo.mIsEnabled).isFalse();
assertThat(speedInfo.mSummary).isEqualTo(mContext.getString(RES_SUMMARY_UNAVAILABLE));
} }
@Test @Test