Enable launching captive portal directly

Whenever a user has connected to a captive portal network, split the
ConnectedAccessPointPreference to allow directly signing into the
captive portal or modifying the network's settings. When in any other
network state, use the old behavior of a single tappable preference that
takes the user to settings.

Bug: 63929546
Bug: 68031656
Test: make RunSettingsRoboTests
Test: manual by connecting to Captive Portal and normal WiFi networks.

Change-Id: I444202a12138d90c94bda94945c121c8c0810536
(cherry picked from commit 7577624db7)
This commit is contained in:
Adam Newman
2018-03-08 16:59:34 -08:00
parent 767743d64d
commit c6b4f3d92c
7 changed files with 186 additions and 22 deletions

View File

@@ -31,12 +31,31 @@ import com.android.settingslib.wifi.AccessPointPreference;
public class ConnectedAccessPointPreference extends AccessPointPreference implements
View.OnClickListener {
private final CaptivePortalStatus mCaptivePortalStatus;
private OnGearClickListener mOnGearClickListener;
private boolean mCaptivePortalNetwork;
public ConnectedAccessPointPreference(AccessPoint accessPoint, Context context,
UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks) {
UserBadgeCache cache, @DrawableRes int iconResId, boolean forSavedNetworks,
CaptivePortalStatus captivePortalStatus) {
super(accessPoint, context, cache, iconResId, forSavedNetworks);
setWidgetLayoutResource(R.layout.preference_widget_gear_no_bg);
mCaptivePortalStatus = captivePortalStatus;
}
@Override
protected int getWidgetLayoutResourceId() {
return R.layout.preference_widget_gear_optional_background;
}
@Override
public void refresh() {
super.refresh();
mCaptivePortalNetwork = mCaptivePortalStatus.isCaptivePortalNetwork();
setShowDivider(mCaptivePortalNetwork);
if (mCaptivePortalNetwork) {
setSummary(R.string.wifi_tap_to_sign_in);
}
}
public void setOnGearClickListener(OnGearClickListener l) {
@@ -44,6 +63,18 @@ public class ConnectedAccessPointPreference extends AccessPointPreference implem
notifyChanged();
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
final View gear = holder.findViewById(R.id.settings_button);
gear.setOnClickListener(this);
final View gearNoBg = holder.findViewById(R.id.settings_button_no_background);
gearNoBg.setVisibility(mCaptivePortalNetwork ? View.INVISIBLE : View.VISIBLE);
gear.setVisibility(mCaptivePortalNetwork ? View.VISIBLE : View.INVISIBLE);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.settings_button) {
@@ -56,4 +87,8 @@ public class ConnectedAccessPointPreference extends AccessPointPreference implem
public interface OnGearClickListener {
void onGearClick(ConnectedAccessPointPreference p);
}
public interface CaptivePortalStatus {
boolean isCaptivePortalNetwork();
}
}