diff --git a/res/layout/condition_card.xml b/res/layout/condition_card.xml index 0e480a5b435..c1224b5244a 100644 --- a/res/layout/condition_card.xml +++ b/res/layout/condition_card.xml @@ -85,11 +85,13 @@ 0); } if (isExpanded) { view.summary.setText(condition.getSummary()); - CharSequence[] actions = condition.getActions(); for (int i = 0; i < 2; i++) { Button button = (Button) detailGroup.findViewById(i == 0 ? R.id.first_action : R.id.second_action); @@ -105,7 +105,9 @@ public class ConditionAdapterUtils { } private static void animateChange(final View view, final View content, - final View detailGroup, final boolean visible) { + final View detailGroup, final boolean visible, final boolean hasButtons) { + setViewVisibility(detailGroup, R.id.divider, hasButtons); + setViewVisibility(detailGroup, R.id.buttonBar, hasButtons); final int beforeBottom = content.getBottom(); setHeight(detailGroup, visible ? LayoutParams.WRAP_CONTENT : 0); detailGroup.setVisibility(View.VISIBLE); @@ -138,4 +140,11 @@ public class ConditionAdapterUtils { params.height = height; detailGroup.setLayoutParams(params); } + + private static void setViewVisibility(View containerView, int viewId, boolean visible) { + View view = containerView.findViewById(viewId); + if (view != null) { + view.setVisibility(visible ? View.VISIBLE : View.GONE); + } + } } diff --git a/src/com/android/settings/dashboard/conditional/HotspotCondition.java b/src/com/android/settings/dashboard/conditional/HotspotCondition.java index be74c9e0da2..17be591e6af 100644 --- a/src/com/android/settings/dashboard/conditional/HotspotCondition.java +++ b/src/com/android/settings/dashboard/conditional/HotspotCondition.java @@ -21,10 +21,15 @@ import android.content.Intent; import android.graphics.drawable.Icon; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; +import android.os.UserHandle; +import android.os.UserManager; + import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.TetherSettings; import com.android.settings.Utils; +import com.android.settingslib.RestrictedLockUtils; +import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.TetherUtil; public class HotspotCondition extends Condition { @@ -74,7 +79,12 @@ public class HotspotCondition extends Condition { @Override public CharSequence[] getActions() { - return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) }; + final Context context = mManager.getContext(); + if (RestrictedLockUtils.hasBaseUserRestriction(context, + UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) { + return new CharSequence[0]; + } + return new CharSequence[] { context.getString(R.string.condition_turn_off) }; } @Override @@ -86,8 +96,15 @@ public class HotspotCondition extends Condition { @Override public void onActionClick(int index) { if (index == 0) { - TetherUtil.setWifiTethering(false, mManager.getContext()); - setActive(false); + final Context context = mManager.getContext(); + final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(context, + UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()); + if (admin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context, admin); + } else { + TetherUtil.setWifiTethering(false, context); + setActive(false); + } } else { throw new IllegalArgumentException("Unexpected index " + index); } diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index 2ff404d0f36..f064050b671 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -26,6 +26,8 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.os.Message; +import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import android.widget.Switch; import android.widget.Toast; @@ -35,6 +37,8 @@ import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.search.Index; import com.android.settings.widget.SwitchBar; +import com.android.settingslib.RestrictedLockUtils; +import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.WirelessUtils; import java.util.concurrent.atomic.AtomicBoolean; @@ -136,6 +140,9 @@ public class WifiEnabler implements SwitchBar.OnSwitchChangeListener { } private void handleWifiStateChanged(int state) { + // Clear any previous state + mSwitchBar.setDisabledByAdmin(null); + switch (state) { case WifiManager.WIFI_STATE_ENABLING: mSwitchBar.setEnabled(false); @@ -158,6 +165,16 @@ public class WifiEnabler implements SwitchBar.OnSwitchChangeListener { mSwitchBar.setEnabled(true); updateSearchIndex(false); } + if (mayDisableTethering(!mSwitchBar.isChecked())) { + if (RestrictedLockUtils.hasBaseUserRestriction(mContext, + UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) { + mSwitchBar.setEnabled(false); + } else { + final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(mContext, + UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()); + mSwitchBar.setDisabledByAdmin(admin); + } + } } private void updateSearchIndex(boolean isWiFiOn) { @@ -206,9 +223,7 @@ public class WifiEnabler implements SwitchBar.OnSwitchChangeListener { } // Disable tethering if enabling Wifi - int wifiApState = mWifiManager.getWifiApState(); - if (isChecked && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || - (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED))) { + if (mayDisableTethering(isChecked)) { mWifiManager.setWifiApEnabled(null, false); } MetricsLogger.action(mContext, @@ -219,4 +234,10 @@ public class WifiEnabler implements SwitchBar.OnSwitchChangeListener { Toast.makeText(mContext, R.string.wifi_error, Toast.LENGTH_SHORT).show(); } } + + private boolean mayDisableTethering(boolean isChecked) { + final int wifiApState = mWifiManager.getWifiApState(); + return isChecked && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) || + (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED)); + } }