Snap for 7449603 from 8e6c488de2 to sc-v2-release
Change-Id: I788c8a3ed9a64599aa2eece0545be70ca785181c
This commit is contained in:
@@ -713,7 +713,8 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name="Settings$ManageAssistActivity"
|
android:name="Settings$ManageAssistActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:label="@string/assist_and_voice_input_title">
|
android:label="@string/assist_and_voice_input_title"
|
||||||
|
android:theme="@style/Theme.SubSettings">
|
||||||
<intent-filter android:priority="1">
|
<intent-filter android:priority="1">
|
||||||
<action android:name="android.settings.VOICE_INPUT_SETTINGS" />
|
<action android:name="android.settings.VOICE_INPUT_SETTINGS" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
<!--
|
|
||||||
Copyright (C) 2021 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.
|
|
||||||
-->
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24.0"
|
|
||||||
android:viewportHeight="24.0">
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10c0.34,0 0.68,-0.02 1.01,-0.05V20h-1v-0.04c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96H13v-2H9.66c-0.09,-0.66 -0.16,-1.32 -0.16,-2s0.07,-1.35 0.16,-2H21.8C20.87,5.44 16.83,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56C16.43,5.07 17.96,6.35 18.92,8zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82C10.52,6.57 11.17,5.24 12,4.04zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2s0.06,1.34 0.14,2H4.26zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56C7.57,18.93 6.04,17.66 5.08,16zM8.03,8H5.08c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8z"
|
|
||||||
android:fillAlpha="0.3"/>
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M22,19.3v-0.9l-3.37,-2.25v-2.47C18.63,13.3 18.35,13 18,13s-0.63,0.3 -0.63,0.68v2.47L14,18.4v0.9l3.37,-1.12v2.48l-0.84,0.68V22L18,21.55L19.47,22v-0.67l-0.84,-0.68v-2.48L22,19.3z"/>
|
|
||||||
</vector>
|
|
||||||
28
res/drawable/ic_no_internet_unavailable.xml
Normal file
28
res/drawable/ic_no_internet_unavailable.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<!--
|
||||||
|
Copyright (C) 2021 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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M2,12C2,6.48 6.47,2 11.99,2C17.52,2 22,6.48 22,12c0,0.34 -0.02,0.67 -0.05,1h-2.02c0.04,-0.33 0.07,-0.66 0.07,-1c0,-0.69 -0.1,-1.36 -0.26,-2h-3.38c0.08,0.66 0.14,1.32 0.14,2c0,0.34 -0.01,0.67 -0.04,1h-2.01c0.03,-0.33 0.05,-0.66 0.05,-1c0,-0.68 -0.07,-1.35 -0.16,-2H9.66c-0.09,0.65 -0.16,1.32 -0.16,2s0.07,1.34 0.16,2H13v2h-2.91c0.43,1.43 1.08,2.76 1.91,3.96V20h1v1.95C12.67,21.98 12.33,22 11.99,22C6.47,22 2,17.52 2,12zM15.97,8h2.95c-0.96,-1.65 -2.49,-2.93 -4.33,-3.56C15.19,5.55 15.65,6.75 15.97,8zM13.91,8C13.48,6.57 12.83,5.24 12,4.04c-0.83,1.2 -1.48,2.53 -1.91,3.96H13.91zM4,12c0,0.69 0.1,1.36 0.26,2h3.38c-0.08,-0.66 -0.14,-1.32 -0.14,-2s0.06,-1.34 0.14,-2H4.26C4.1,10.64 4,11.31 4,12zM8.03,16H5.08c0.96,1.66 2.49,2.93 4.33,3.56C8.81,18.45 8.35,17.25 8.03,16zM5.08,8h2.95c0.32,-1.25 0.78,-2.45 1.38,-3.56C7.57,5.07 6.04,6.34 5.08,8z"
|
||||||
|
android:fillAlpha="0.3"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M22,16.41L20.59,15l-2.09,2.09L16.41,15L15,16.41l2.09,2.09L15,20.59L16.41,22l2.09,-2.08L20.59,22L22,20.59l-2.08,-2.09L22,16.41z"/>
|
||||||
|
</vector>
|
||||||
32
res/layout/manage_apps_filter_spinner.xml
Normal file
32
res/layout/manage_apps_filter_spinner.xml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2021 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@android:color/transparent">
|
||||||
|
|
||||||
|
<com.android.settingslib.widget.settingsspinner.SettingsSpinner
|
||||||
|
android:id="@+id/filter_spinner"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_marginStart="24dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:theme="@style/Widget.PopupWindow.Settings"/>
|
||||||
|
</FrameLayout>
|
||||||
@@ -17,16 +17,19 @@
|
|||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
|
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
public class EnterpriseDisclosurePreferenceController extends BasePreferenceController {
|
public class EnterpriseDisclosurePreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
||||||
|
|
||||||
public EnterpriseDisclosurePreferenceController(Context context, String key) {
|
public EnterpriseDisclosurePreferenceController(Context context, String key) {
|
||||||
@@ -36,6 +39,16 @@ public class EnterpriseDisclosurePreferenceController extends BasePreferenceCont
|
|||||||
.getEnterprisePrivacyFeatureProvider(mContext);
|
.getEnterprisePrivacyFeatureProvider(mContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
final CharSequence disclosure = getDisclosure();
|
||||||
|
if (disclosure == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updateFooterPreference(screen, disclosure);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
if (getDisclosure() == null) {
|
if (getDisclosure() == null) {
|
||||||
@@ -49,12 +62,18 @@ public class EnterpriseDisclosurePreferenceController extends BasePreferenceCont
|
|||||||
return mFeatureProvider.getDeviceOwnerDisclosure();
|
return mFeatureProvider.getDeviceOwnerDisclosure();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
void updateFooterPreference(PreferenceScreen screen, CharSequence disclosure) {
|
||||||
public void updateState(Preference preference) {
|
final FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
|
||||||
final CharSequence disclosure = getDisclosure();
|
footerPreference.setTitle(disclosure);
|
||||||
if (disclosure == null) {
|
footerPreference.setLearnMoreAction(view -> {
|
||||||
return;
|
mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS));
|
||||||
|
});
|
||||||
|
final String learnMoreContentDescription = mContext.getString(
|
||||||
|
R.string.footer_learn_more_content_description, getLabelName());
|
||||||
|
footerPreference.setLearnMoreContentDescription(learnMoreContentDescription);
|
||||||
}
|
}
|
||||||
preference.setTitle(disclosure);
|
|
||||||
|
private String getLabelName() {
|
||||||
|
return mContext.getString(R.string.header_add_an_account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
final Activity activity = getActivity();
|
final Activity activity = getActivity();
|
||||||
final FrameLayout pinnedHeader = mRootView.findViewById(R.id.pinned_header);
|
final FrameLayout pinnedHeader = mRootView.findViewById(R.id.pinned_header);
|
||||||
mSpinnerHeader = activity.getLayoutInflater()
|
mSpinnerHeader = activity.getLayoutInflater()
|
||||||
.inflate(R.layout.apps_filter_spinner, pinnedHeader, false);
|
.inflate(R.layout.manage_apps_filter_spinner, pinnedHeader, false);
|
||||||
mFilterSpinner = mSpinnerHeader.findViewById(R.id.filter_spinner);
|
mFilterSpinner = mSpinnerHeader.findViewById(R.id.filter_spinner);
|
||||||
mFilterAdapter = new FilterSpinnerAdapter(this);
|
mFilterAdapter = new FilterSpinnerAdapter(this);
|
||||||
mFilterSpinner.setAdapter(mFilterAdapter);
|
mFilterSpinner.setAdapter(mFilterAdapter);
|
||||||
|
|||||||
@@ -360,6 +360,11 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
// Icon provided by the content provider overrides any static icon.
|
// Icon provided by the content provider overrides any static icon.
|
||||||
if (tile.getMetaData() != null
|
if (tile.getMetaData() != null
|
||||||
&& tile.getMetaData().containsKey(META_DATA_PREFERENCE_ICON_URI)) {
|
&& tile.getMetaData().containsKey(META_DATA_PREFERENCE_ICON_URI)) {
|
||||||
|
// Set a transparent color before starting to fetch the real icon, this is necessary
|
||||||
|
// to avoid preference padding change.
|
||||||
|
setPreferenceIcon(preference, tile, forceRoundedIcon, mContext.getPackageName(),
|
||||||
|
Icon.createWithResource(mContext, android.R.color.transparent));
|
||||||
|
|
||||||
ThreadUtils.postOnBackgroundThread(() -> {
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
final Intent intent = tile.getIntent();
|
final Intent intent = tile.getIntent();
|
||||||
String packageName = null;
|
String packageName = null;
|
||||||
|
|||||||
@@ -100,9 +100,6 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
|
|||||||
} else {
|
} else {
|
||||||
disclosure.append(mResources.getString(R.string.do_disclosure_generic));
|
disclosure.append(mResources.getString(R.string.do_disclosure_generic));
|
||||||
}
|
}
|
||||||
disclosure.append(mResources.getString(R.string.do_disclosure_learn_more_separator));
|
|
||||||
disclosure.append(mResources.getString(R.string.learn_more),
|
|
||||||
new EnterprisePrivacySpan(mContext), 0);
|
|
||||||
return disclosure;
|
return disclosure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static Map<Integer, Integer> sIconMap = new HashMap<>();
|
static Map<Integer, Integer> sIconMap = new HashMap<>();
|
||||||
static {
|
static {
|
||||||
sIconMap.put(INTERNET_OFF, R.drawable.ic_no_internet_airplane);
|
sIconMap.put(INTERNET_OFF, R.drawable.ic_no_internet_unavailable);
|
||||||
sIconMap.put(INTERNET_NETWORKS_AVAILABLE, R.drawable.ic_no_internet_available);
|
sIconMap.put(INTERNET_NETWORKS_AVAILABLE, R.drawable.ic_no_internet_available);
|
||||||
sIconMap.put(INTERNET_WIFI, R.drawable.ic_wifi_signal_4);
|
sIconMap.put(INTERNET_WIFI, R.drawable.ic_wifi_signal_4);
|
||||||
sIconMap.put(INTERNET_CELLULAR, R.drawable.ic_network_cell);
|
sIconMap.put(INTERNET_CELLULAR, R.drawable.ic_network_cell);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import androidx.preference.SwitchPreference;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.network.SubscriptionUtil;
|
import com.android.settings.network.SubscriptionUtil;
|
||||||
|
import com.android.settings.network.ims.WifiCallingQueryImsState;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -147,16 +148,20 @@ public class BackupCallingPreferenceController extends TelephonyTogglePreference
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasBackupCallingFeature(int subscriptionId) {
|
private boolean hasBackupCallingFeature(int subscriptionId) {
|
||||||
PersistableBundle carrierConfig = getCarrierConfigForSubId(subscriptionId);
|
return isCrossSimEnabledByPlatform(mContext, subscriptionId);
|
||||||
Boolean featureEnableStatus = null;
|
|
||||||
if (carrierConfig != null) {
|
|
||||||
featureEnableStatus = carrierConfig.getBoolean(
|
|
||||||
CarrierConfigManager.KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL, false);
|
|
||||||
}
|
}
|
||||||
// TODO: remove log after fixing b/182326102
|
|
||||||
Log.d(LOG_TAG, "config " + CarrierConfigManager.KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL
|
protected boolean isCrossSimEnabledByPlatform(Context context, int subscriptionId) {
|
||||||
+ "=" + featureEnableStatus + " for subId=" + subscriptionId);
|
// TODO : Change into API which created for accessing
|
||||||
return (featureEnableStatus != null) && featureEnableStatus.booleanValue();
|
// com.android.ims.ImsManager#isCrossSimEnabledByPlatform()
|
||||||
|
if ((new WifiCallingQueryImsState(context, subscriptionId)).isWifiCallingSupported()) {
|
||||||
|
PersistableBundle bundle = getCarrierConfigForSubId(subscriptionId);
|
||||||
|
return (bundle != null) && bundle.getBoolean(
|
||||||
|
CarrierConfigManager.KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL,
|
||||||
|
false /*default*/);
|
||||||
|
}
|
||||||
|
Log.d(LOG_TAG, "Not supported by framework. subId = " + subscriptionId);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ImsMmTelManager getImsMmTelManager(int subId) {
|
private ImsMmTelManager getImsMmTelManager(int subId) {
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ import android.content.Context;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.android.settings.Utils;
|
|
||||||
|
|
||||||
public class PanelFeatureProviderImpl implements PanelFeatureProvider {
|
public class PanelFeatureProviderImpl implements PanelFeatureProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -41,9 +39,6 @@ public class PanelFeatureProviderImpl implements PanelFeatureProvider {
|
|||||||
case Settings.Panel.ACTION_NFC:
|
case Settings.Panel.ACTION_NFC:
|
||||||
return NfcPanel.create(context);
|
return NfcPanel.create(context);
|
||||||
case Settings.Panel.ACTION_WIFI:
|
case Settings.Panel.ACTION_WIFI:
|
||||||
if (Utils.isProviderModelEnabled(context)) {
|
|
||||||
return InternetConnectivityPanel.create(context);
|
|
||||||
}
|
|
||||||
return WifiPanel.create(context);
|
return WifiPanel.create(context);
|
||||||
case Settings.Panel.ACTION_VOLUME:
|
case Settings.Panel.ACTION_VOLUME:
|
||||||
return VolumePanel.create(context);
|
return VolumePanel.create(context);
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ import androidx.preference.Preference;
|
|||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.android.net.module.util.Inet4AddressUtils;
|
import com.android.net.module.util.Inet4AddressUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -513,6 +514,12 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
|
// Disable the animation of the EntityHeaderController
|
||||||
|
final RecyclerView recyclerView = mFragment.getListView();
|
||||||
|
if (recyclerView != null) {
|
||||||
|
recyclerView.setItemAnimator(null);
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure mNetwork is set before any callbacks above are delivered, since our
|
// Ensure mNetwork is set before any callbacks above are delivered, since our
|
||||||
// NetworkCallback only looks at changes to mNetwork.
|
// NetworkCallback only looks at changes to mNetwork.
|
||||||
updateNetworkInfo();
|
updateNetworkInfo();
|
||||||
|
|||||||
@@ -19,20 +19,25 @@ package com.android.settings.accounts;
|
|||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.never;
|
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 android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
@@ -42,13 +47,18 @@ public class EnterpriseDisclosurePreferenceControllerTest {
|
|||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private EnterpriseDisclosurePreferenceController mController;
|
private EnterpriseDisclosurePreferenceController mController;
|
||||||
private Preference mPreference;
|
private FooterPreference mPreference;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PreferenceScreen mPreferenceScreen;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mController = spy(new EnterpriseDisclosurePreferenceController(mContext, "my_key"));
|
mController = spy(new EnterpriseDisclosurePreferenceController(mContext, "my_key"));
|
||||||
mPreference = spy(new Preference(mContext));
|
mPreference = spy(new FooterPreference(mContext));
|
||||||
|
when(mPreferenceScreen.findPreference(anyString())).thenReturn(mPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -68,19 +78,19 @@ public class EnterpriseDisclosurePreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_hasDisclosure_shouldSetTitle() {
|
public void displayPreference_hasDisclosure_shouldSetTitle() {
|
||||||
doReturn(TEST_DISCLOSURE).when(mController).getDisclosure();
|
doReturn(TEST_DISCLOSURE).when(mController).getDisclosure();
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.displayPreference(mPreferenceScreen);
|
||||||
|
|
||||||
assertThat(mPreference.getTitle()).isEqualTo(TEST_DISCLOSURE);
|
assertThat(mPreference.getTitle()).isEqualTo(TEST_DISCLOSURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_noDisclosure_shouldBeInvisible() {
|
public void displayPreference_noDisclosure_shouldBeInvisible() {
|
||||||
doReturn(null).when(mController).getDisclosure();
|
doReturn(null).when(mController).getDisclosure();
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.displayPreference(mPreferenceScreen);
|
||||||
|
|
||||||
verify(mPreference, never()).setTitle(any());
|
verify(mPreference, never()).setTitle(any());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,10 +27,7 @@ import android.provider.Settings;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
|
||||||
import com.android.settings.testutils.FeatureFlagUtilsRule;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
@@ -39,9 +36,6 @@ public class PanelFeatureProviderImplTest {
|
|||||||
|
|
||||||
private static final String TEST_PACKAGENAME = "com.test.packagename";
|
private static final String TEST_PACKAGENAME = "com.test.packagename";
|
||||||
|
|
||||||
@Rule
|
|
||||||
public final FeatureFlagUtilsRule mFeatureFlagUtilsRule = new FeatureFlagUtilsRule();
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PanelFeatureProviderImpl mProvider;
|
private PanelFeatureProviderImpl mProvider;
|
||||||
private Bundle mBundle;
|
private Bundle mBundle;
|
||||||
@@ -71,24 +65,4 @@ public class PanelFeatureProviderImplTest {
|
|||||||
|
|
||||||
assertThat(panel).isInstanceOf(VolumePanel.class);
|
assertThat(panel).isInstanceOf(VolumePanel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getPanel_wifi_returnsWifiPanelWhenProviderModelDisable() {
|
|
||||||
mFeatureFlagUtilsRule.setProviderModelEnabled(false);
|
|
||||||
mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_WIFI);
|
|
||||||
|
|
||||||
final PanelContent panel = mProvider.getPanel(mContext, mBundle);
|
|
||||||
|
|
||||||
assertThat(panel).isInstanceOf(WifiPanel.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getPanel_wifi_returnsInternetConnectivityPanelWhenProviderModelDisable() {
|
|
||||||
mFeatureFlagUtilsRule.setProviderModelEnabled(true);
|
|
||||||
mBundle.putString(KEY_PANEL_TYPE_ARGUMENT, Settings.Panel.ACTION_WIFI);
|
|
||||||
|
|
||||||
final PanelContent panel = mProvider.getPanel(mContext, mBundle);
|
|
||||||
|
|
||||||
assertThat(panel).isInstanceOf(InternetConnectivityPanel.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2020 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.settings.testutils;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.FeatureFlagUtils;
|
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
|
||||||
|
|
||||||
import org.junit.rules.ExternalResource;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A test rule that is used to automatically recover the FeatureFlagUtils resource after testing.
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* <pre class="code"><code class="java">
|
|
||||||
* public class ExampleTest {
|
|
||||||
*
|
|
||||||
* @Rule
|
|
||||||
* public final FeatureFlagUtilsRule mFeatureFlagUtilsRule = new FeatureFlagUtilsRule();
|
|
||||||
*
|
|
||||||
* }
|
|
||||||
* </code></pre>
|
|
||||||
*/
|
|
||||||
public class FeatureFlagUtilsRule extends ExternalResource {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private Map<String, Boolean> mBackupFeatureFlags = new HashMap<String, Boolean>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void before() throws Throwable {
|
|
||||||
mContext = ApplicationProvider.getApplicationContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void after() {
|
|
||||||
mBackupFeatureFlags.forEach((k, v) -> FeatureFlagUtils.setEnabled(mContext, k, v));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnabled(String feature, boolean enabled) {
|
|
||||||
if (enabled == FeatureFlagUtils.isEnabled(mContext, feature)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mBackupFeatureFlags.putIfAbsent(feature, !enabled);
|
|
||||||
FeatureFlagUtils.setEnabled(mContext, feature, enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProviderModelEnabled(boolean enabled) {
|
|
||||||
setEnabled(FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, enabled);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user