diff --git a/res/xml/location_services.xml b/res/xml/location_services.xml index 04eff2343a3..917ef1d28f7 100644 --- a/res/xml/location_services.xml +++ b/res/xml/location_services.xml @@ -16,21 +16,20 @@ - - + android:key="location_services" + android:title="@string/location_services_preference_title" + settings:controller="com.android.settings.location.LocationInjectedServicesPreferenceController"> diff --git a/res/xml/location_services_workprofile.xml b/res/xml/location_services_workprofile.xml index 6db208367d9..a130838afec 100644 --- a/res/xml/location_services_workprofile.xml +++ b/res/xml/location_services_workprofile.xml @@ -16,12 +16,7 @@ - - - + android:title="@string/location_services_screen_title" + android:key="location_services_managed_profile" + settings:controller="com.android.settings.location.LocationInjectedServicesForWorkPreferenceController"> diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java index 30b971c0c58..9be2177524f 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java @@ -99,6 +99,8 @@ public abstract class ProfileSelectFragment extends DashboardFragment { private ViewGroup mContentView; + private ViewPager2 mViewPager; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -111,12 +113,21 @@ public abstract class ProfileSelectFragment extends DashboardFragment { final int selectedTab = getTabId(activity, getArguments()); final View tabContainer = mContentView.findViewById(R.id.tab_container); - final ViewPager2 viewPager = tabContainer.findViewById(R.id.view_pager); - viewPager.setAdapter(new ProfileSelectFragment.ViewPagerAdapter(this)); + mViewPager = tabContainer.findViewById(R.id.view_pager); + mViewPager.setAdapter(new ProfileSelectFragment.ViewPagerAdapter(this)); final TabLayout tabs = tabContainer.findViewById(R.id.tabs); - new TabLayoutMediator(tabs, viewPager, + new TabLayoutMediator(tabs, mViewPager, (tab, position) -> tab.setText(getPageTitle(position)) ).attach(); + mViewPager.registerOnPageChangeCallback( + new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + updateHeight(position); + } + } + ); tabContainer.setVisibility(View.VISIBLE); final TabLayout.Tab tab = tabs.getTabAt(selectedTab); tab.select(); @@ -133,6 +144,36 @@ public abstract class ProfileSelectFragment extends DashboardFragment { return mContentView; } + protected boolean forceUpdateHeight() { + return false; + } + + private void updateHeight(int position) { + if (!forceUpdateHeight()) { + return; + } + ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter(); + if (adapter == null || adapter.getItemCount() <= position) { + return; + } + + Fragment fragment = adapter.createFragment(position); + View newPage = fragment.getView(); + if (newPage != null) { + int viewWidth = View.MeasureSpec.makeMeasureSpec(newPage.getWidth(), + View.MeasureSpec.EXACTLY); + int viewHeight = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + newPage.measure(viewWidth, viewHeight); + int currentHeight = mViewPager.getLayoutParams().height; + int newHeight = newPage.getMeasuredHeight(); + if (newHeight != 0 && currentHeight != newHeight) { + ViewGroup.LayoutParams layoutParams = mViewPager.getLayoutParams(); + layoutParams.height = newHeight; + mViewPager.setLayoutParams(layoutParams); + } + } + } + @Override public int getMetricsCategory() { return METRICS_CATEGORY_UNKNOWN; diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java index 5f25f599988..111e4ce7b86 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java @@ -50,4 +50,9 @@ public class ProfileSelectLocationServicesFragment extends ProfileSelectFragment protected int getPreferenceScreenResId() { return R.xml.location_services_header; } + + @Override + protected boolean forceUpdateHeight() { + return true; + } } diff --git a/src/com/android/settings/location/LocationInjectedServicesForWorkPreferenceController.java b/src/com/android/settings/location/LocationInjectedServicesForWorkPreferenceController.java index b7e6cf2a412..a8a13b3ca76 100644 --- a/src/com/android/settings/location/LocationInjectedServicesForWorkPreferenceController.java +++ b/src/com/android/settings/location/LocationInjectedServicesForWorkPreferenceController.java @@ -20,7 +20,6 @@ import android.content.Context; import android.os.UserHandle; import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.widget.RestrictedAppPreference; @@ -41,8 +40,6 @@ public class LocationInjectedServicesForWorkPreferenceController extends @Override protected void injectLocationServices(PreferenceScreen screen) { - final PreferenceCategory categoryLocationServices = - screen.findPreference(getPreferenceKey()); final Map> prefs = getLocationServices(); for (Map.Entry> entry : prefs.entrySet()) { for (Preference pref : entry.getValue()) { @@ -51,7 +48,7 @@ public class LocationInjectedServicesForWorkPreferenceController extends } } if (entry.getKey() != UserHandle.myUserId()) { - LocationSettings.addPreferencesSorted(entry.getValue(), categoryLocationServices); + LocationSettings.addPreferencesSorted(entry.getValue(), screen); } } } diff --git a/src/com/android/settings/location/LocationInjectedServicesPreferenceController.java b/src/com/android/settings/location/LocationInjectedServicesPreferenceController.java index d623baef56c..356716d3a68 100644 --- a/src/com/android/settings/location/LocationInjectedServicesPreferenceController.java +++ b/src/com/android/settings/location/LocationInjectedServicesPreferenceController.java @@ -19,7 +19,6 @@ import android.content.Context; import android.os.UserHandle; import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.widget.RestrictedAppPreference; @@ -41,8 +40,6 @@ public class LocationInjectedServicesPreferenceController @Override protected void injectLocationServices(PreferenceScreen screen) { - final PreferenceCategory categoryLocationServices = - screen.findPreference(getPreferenceKey()); final Map> prefs = getLocationServices(); for (Map.Entry> entry : prefs.entrySet()) { for (Preference pref : entry.getValue()) { @@ -51,10 +48,7 @@ public class LocationInjectedServicesPreferenceController } } if (entry.getKey() == UserHandle.myUserId()) { - if (categoryLocationServices != null) { - LocationSettings.addPreferencesSorted(entry.getValue(), - categoryLocationServices); - } + LocationSettings.addPreferencesSorted(entry.getValue(), screen); } } } diff --git a/src/com/android/settings/location/LocationServices.java b/src/com/android/settings/location/LocationServices.java index aceb9d56583..52e958cb093 100644 --- a/src/com/android/settings/location/LocationServices.java +++ b/src/com/android/settings/location/LocationServices.java @@ -22,12 +22,8 @@ import android.content.Context; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.search.SearchIndexable; -import java.util.ArrayList; -import java.util.List; - /** * A page that configures the Location Services settings including Wi-Fi scanning, Bluetooth * scanning, and injected location services. @@ -51,11 +47,6 @@ public class LocationServices extends DashboardFragment { return TAG; } - @Override - protected List createPreferenceControllers(Context context) { - return buildPreferenceControllers(context); - } - @Override public void onAttach(Context context) { super.onAttach(context); @@ -63,23 +54,9 @@ public class LocationServices extends DashboardFragment { use(LocationInjectedServicesPreferenceController.class).init(this); } - private static List buildPreferenceControllers(Context context) { - final List controllers = new ArrayList<>(); - controllers.add(new WifiScanningPreferenceController(context)); - controllers.add(new BluetoothScanningPreferenceController(context)); - return controllers; - } - /** * For Search. */ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.location_services) { - - @Override - public List createPreferenceControllers(Context - context) { - return buildPreferenceControllers(context); - } - }; + new BaseSearchIndexProvider(R.xml.location_services); } diff --git a/src/com/android/settings/location/LocationServicesForWork.java b/src/com/android/settings/location/LocationServicesForWork.java index 4b3124eb129..390be101ddf 100644 --- a/src/com/android/settings/location/LocationServicesForWork.java +++ b/src/com/android/settings/location/LocationServicesForWork.java @@ -22,12 +22,8 @@ import android.content.Context; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.search.SearchIndexable; -import java.util.ArrayList; -import java.util.List; - /** * A page that configures the Location Services settings for work profile. */ @@ -50,32 +46,15 @@ public class LocationServicesForWork extends DashboardFragment { return TAG; } - @Override - protected List createPreferenceControllers(Context context) { - return buildPreferenceControllers(context); - } - @Override public void onAttach(Context context) { super.onAttach(context); use(LocationInjectedServicesForWorkPreferenceController.class).init(this); } - private static List buildPreferenceControllers(Context context) { - final List controllers = new ArrayList<>(); - return controllers; - } - /** * For Search. */ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.location_services_workprofile) { - - @Override - public List createPreferenceControllers(Context - context) { - return buildPreferenceControllers(context); - } - }; + new BaseSearchIndexProvider(R.xml.location_services_workprofile); }