diff options
Diffstat (limited to 'packages/SettingsLib/src')
15 files changed, 70 insertions, 147 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java index ad7e995412aa..fc8b5879c5fa 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreference.java @@ -27,6 +27,8 @@ import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceViewHolder; +import com.android.settingslib.widget.TwoTargetPreference; + /** * Preference class that supports being disabled by a user restriction * set by a device admin. diff --git a/packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java b/packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java deleted file mode 100644 index 02895a479352..000000000000 --- a/packages/SettingsLib/src/com/android/settingslib/TwoTargetPreference.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settingslib; - -import android.annotation.IntDef; -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; - -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -public class TwoTargetPreference extends Preference { - - @IntDef({ICON_SIZE_DEFAULT, ICON_SIZE_MEDIUM, ICON_SIZE_SMALL}) - @Retention(RetentionPolicy.SOURCE) - public @interface IconSize { - } - - public static final int ICON_SIZE_DEFAULT = 0; - public static final int ICON_SIZE_MEDIUM = 1; - public static final int ICON_SIZE_SMALL = 2; - - @IconSize - private int mIconSize; - private int mSmallIconSize; - private int mMediumIconSize; - - public TwoTargetPreference(Context context, AttributeSet attrs, - int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(context); - } - - public TwoTargetPreference(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - public TwoTargetPreference(Context context, AttributeSet attrs) { - super(context, attrs); - init(context); - } - - public TwoTargetPreference(Context context) { - super(context); - init(context); - } - - private void init(Context context) { - setLayoutResource(R.layout.preference_two_target); - mSmallIconSize = context.getResources().getDimensionPixelSize( - R.dimen.two_target_pref_small_icon_size); - mMediumIconSize = context.getResources().getDimensionPixelSize( - R.dimen.two_target_pref_medium_icon_size); - final int secondTargetResId = getSecondTargetResId(); - if (secondTargetResId != 0) { - setWidgetLayoutResource(secondTargetResId); - } - } - - public void setIconSize(@IconSize int iconSize) { - mIconSize = iconSize; - } - - @Override - public void onBindViewHolder(PreferenceViewHolder holder) { - super.onBindViewHolder(holder); - final ImageView icon = holder.itemView.findViewById(android.R.id.icon); - switch (mIconSize) { - case ICON_SIZE_SMALL: - icon.setLayoutParams(new LinearLayout.LayoutParams(mSmallIconSize, mSmallIconSize)); - break; - case ICON_SIZE_MEDIUM: - icon.setLayoutParams( - new LinearLayout.LayoutParams(mMediumIconSize, mMediumIconSize)); - break; - } - final View divider = holder.findViewById(R.id.two_target_divider); - final View widgetFrame = holder.findViewById(android.R.id.widget_frame); - final boolean shouldHideSecondTarget = shouldHideSecondTarget(); - if (divider != null) { - divider.setVisibility(shouldHideSecondTarget ? View.GONE : View.VISIBLE); - } - if (widgetFrame != null) { - widgetFrame.setVisibility(shouldHideSecondTarget ? View.GONE : View.VISIBLE); - } - } - - protected boolean shouldHideSecondTarget() { - return getSecondTargetResId() == 0; - } - - protected int getSecondTargetResId() { - return 0; - } -} diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index f4117cec3652..b863685b2eca 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -23,7 +23,6 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.location.LocationManager; import android.media.AudioManager; -import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.net.TetheringManager; import android.net.vcn.VcnTransportInfo; @@ -37,6 +36,7 @@ import android.provider.Settings; import android.telephony.AccessNetworkConstants; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; +import android.telephony.TelephonyManager; import androidx.annotation.NonNull; import androidx.core.graphics.drawable.RoundedBitmapDrawable; @@ -501,8 +501,7 @@ public class Utils { } public static boolean isWifiOnly(Context context) { - return !context.getSystemService(ConnectivityManager.class) - .isNetworkSupported(ConnectivityManager.TYPE_MOBILE); + return !context.getSystemService(TelephonyManager.class).isDataCapable(); } /** Returns if the automatic storage management feature is turned on or not. **/ diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java index 898796828131..a5da8b6bd15e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java @@ -31,6 +31,7 @@ import android.os.Environment; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; +import android.text.TextUtils; import android.util.Log; import com.android.settingslib.R; @@ -198,4 +199,17 @@ public class AppUtils { } return false; } + + /** + * Returns a boolean indicating whether a given package is a default browser. + * + * @param packageName a given package. + * @return true if the given package is default browser. + */ + public static boolean isDefaultBrowser(Context context, String packageName) { + final String defaultBrowserPackage = + context.getPackageManager().getDefaultBrowserPackageNameAsUser( + UserHandle.myUserId()); + return TextUtils.equals(packageName, defaultBrowserPackage); + } } diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index 2528ac1767f8..f180776bbe93 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -1496,6 +1496,13 @@ public class ApplicationsState { } } + /** + * Whether the packages for the user have been initialized. + */ + public boolean isUserAdded(int userId) { + return mEntriesMap.contains(userId); + } + public interface Callbacks { void onRunningStateChanged(boolean running); diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index 6dabebc25190..c75d059a3532 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -491,7 +491,6 @@ public class BluetoothEventManager { case BluetoothDevice.UNBOND_REASON_AUTH_TIMEOUT: case BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS: case BluetoothDevice.UNBOND_REASON_REMOTE_AUTH_CANCELED: - case BluetoothDevice.UNBOND_REASON_REMOVED: errorMsg = R.string.bluetooth_pairing_error_message; break; default: diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 7ef3001461fe..43a9b6d349f3 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -1138,7 +1138,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private boolean isProfileConnectedFail() { return mIsA2dpProfileConnectedFail || mIsHearingAidProfileConnectedFail - || mIsHeadsetProfileConnectedFail; + || (!isConnectedSapDevice() && mIsHeadsetProfileConnectedFail); } /** @@ -1289,6 +1289,12 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> BluetoothProfile.STATE_CONNECTED; } + private boolean isConnectedSapDevice() { + SapProfile sapProfile = mProfileManager.getSapProfile(); + return sapProfile != null && sapProfile.getConnectionStatus(mDevice) + == BluetoothProfile.STATE_CONNECTED; + } + public CachedBluetoothDevice getSubDevice() { return mSubDevice; } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java index 215c4035b8db..d4969b47a126 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -523,6 +523,10 @@ public class LocalBluetoothProfileManager { return mHearingAidProfile; } + SapProfile getSapProfile() { + return mSapProfile; + } + public Object getBroadcastProfile() { return mBroadcastProfileObject; } diff --git a/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java b/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java index dfde3c7a2512..c61f8a9c3b53 100644 --- a/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/connectivity/ConnectivitySubsystemsRecoveryManager.java @@ -250,6 +250,7 @@ public class ConnectivitySubsystemsRecoveryManager { * @param callback Callbacks triggered when recovery status changes. */ public void triggerSubsystemRestart(String reason, @NonNull RecoveryStatusCallback callback) { + // TODO: b/183530649 : clean-up or make use of the `reason` argument mHandler.post(() -> { boolean someSubsystemRestarted = false; @@ -264,7 +265,7 @@ public class ConnectivitySubsystemsRecoveryManager { } if (isWifiEnabled()) { - mWifiManager.restartWifiSubsystem(reason); + mWifiManager.restartWifiSubsystem(); mWifiRestartInProgress = true; someSubsystemRestarted = true; startTrackingWifiRestart(); diff --git a/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS b/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS index e7a20b3f73a4..c88ed8e96f99 100644 --- a/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS +++ b/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS @@ -1,6 +1,7 @@ # Default reviewers for this and subdirectories. andychou@google.com arcwang@google.com +changbetty@google.com goldmanj@google.com qal@google.com wengsu@google.com diff --git a/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java index 1474f184775d..f62ca3294665 100644 --- a/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java +++ b/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java @@ -86,6 +86,15 @@ public abstract class AbstractEnableAdbPreferenceController extends } } + @Override + protected void onDeveloperOptionsSwitchEnabled() { + super.onDeveloperOptionsSwitchEnabled(); + if (isAvailable()) { + mPreference.setDisabledByAdmin( + checkIfUsbDataSignalingIsDisabled(mContext, UserHandle.myUserId())); + } + } + public void enablePreference(boolean enabled) { if (isAvailable()) { mPreference.setEnabled(enabled); diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java index 3bb3a0c412a5..7f12cc8e6911 100644 --- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java +++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractIpAddressPreferenceController.java @@ -18,6 +18,7 @@ package com.android.settingslib.deviceinfo; import android.content.Context; import android.net.ConnectivityManager; +import android.net.LinkAddress; import android.net.LinkProperties; import android.net.wifi.WifiManager; @@ -28,7 +29,6 @@ import androidx.preference.PreferenceScreen; import com.android.settingslib.R; import com.android.settingslib.core.lifecycle.Lifecycle; -import java.net.InetAddress; import java.util.Iterator; /** @@ -93,19 +93,19 @@ public abstract class AbstractIpAddressPreferenceController * @return the formatted and newline-separated IP addresses, or null if none. */ private static String getDefaultIpAddresses(ConnectivityManager cm) { - LinkProperties prop = cm.getActiveLinkProperties(); + LinkProperties prop = cm.getLinkProperties(cm.getActiveNetwork()); return formatIpAddresses(prop); } private static String formatIpAddresses(LinkProperties prop) { if (prop == null) return null; - Iterator<InetAddress> iter = prop.getAllAddresses().iterator(); + Iterator<LinkAddress> iter = prop.getAllLinkAddresses().iterator(); // If there are no entries, return null if (!iter.hasNext()) return null; // Concatenate all available addresses, newline separated StringBuilder addresses = new StringBuilder(); while (iter.hasNext()) { - addresses.append(iter.next().getHostAddress()); + addresses.append(iter.next().getAddress().getHostAddress()); if (iter.hasNext()) addresses.append("\n"); } return addresses.toString(); diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java index 092cbf3c7c12..60bcf37304a5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java +++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java @@ -16,7 +16,6 @@ package com.android.settingslib.net; -import static android.net.ConnectivityManager.TYPE_MOBILE; import static android.net.NetworkStatsHistory.FIELD_RX_BYTES; import static android.net.NetworkStatsHistory.FIELD_TX_BYTES; import static android.net.TrafficStats.MB_IN_BYTES; @@ -59,7 +58,6 @@ public class DataUsageController { PERIOD_BUILDER, Locale.getDefault()); private final Context mContext; - private final ConnectivityManager mConnectivityManager; private final INetworkStatsService mStatsService; private final NetworkPolicyManager mPolicyManager; private final NetworkStatsManager mNetworkStatsManager; @@ -71,7 +69,6 @@ public class DataUsageController { public DataUsageController(Context context) { mContext = context; - mConnectivityManager = ConnectivityManager.from(context); mStatsService = INetworkStatsService.Stub.asInterface( ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); mPolicyManager = NetworkPolicyManager.from(mContext); @@ -236,7 +233,7 @@ public class DataUsageController { public boolean isMobileDataSupported() { // require both supported network and ready SIM - return mConnectivityManager.isNetworkSupported(TYPE_MOBILE) + return getTelephonyManager().isDataCapable() && getTelephonyManager().getSimState() == SIM_STATE_READY; } diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS b/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS index 0bde5c030eb0..f3b600c8e9c1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/OWNERS @@ -2,6 +2,7 @@ andychou@google.com arcwang@google.com asapperstein@google.com +changbetty@google.com goldmanj@google.com qal@google.com wengsu@google.com diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java index 8158497046b9..40f0c2b72c94 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java @@ -19,7 +19,6 @@ import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; -import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; @@ -75,26 +74,25 @@ public class WifiStatusTracker { .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build(); - private final NetworkCallback mNetworkCallback = new NetworkCallback() { - @Override - public void onAvailable( - Network network, NetworkCapabilities networkCapabilities, - LinkProperties linkProperties, boolean blocked) { - boolean isVcnOverWifi = - networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) - && (Utils.tryGetWifiInfoForVcn(networkCapabilities) != null); - boolean isWifi = - networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI); - if (isVcnOverWifi || isWifi) { - mNetworks.add(network.getNetId()); - } - } - + private final NetworkCallback mNetworkCallback = + new NetworkCallback(NetworkCallback.FLAG_INCLUDE_LOCATION_INFO) { // Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable // and onLinkPropertiesChanged. @Override public void onCapabilitiesChanged( Network network, NetworkCapabilities networkCapabilities) { + if (!mNetworks.contains(network.getNetId())) { + // New network + boolean isVcnOverWifi = + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) + && (Utils.tryGetWifiInfoForVcn(networkCapabilities) != null); + boolean isWifi = + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI); + if (isVcnOverWifi || isWifi) { + mNetworks.add(network.getNetId()); + } + } + WifiInfo wifiInfo = null; if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { wifiInfo = Utils.tryGetWifiInfoForVcn(networkCapabilities); @@ -131,7 +129,8 @@ public class WifiStatusTracker { } } }; - private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() { + private final NetworkCallback mDefaultNetworkCallback = + new NetworkCallback(NetworkCallback.FLAG_INCLUDE_LOCATION_INFO) { @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { // network is now the default network, and its capabilities are nc. |