Merge "Recalculate view's height when tab is selected" into tm-dev am: 1f6334825f
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/18197509 Change-Id: I831063be158b5097e3cc82e8d5db767676096811 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -16,21 +16,20 @@
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/location_services_preference_title">
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="location_services"
|
||||
android:layout="@layout/preference_category_no_label"
|
||||
settings:controller="com.android.settings.location.LocationInjectedServicesPreferenceController"/>
|
||||
android:key="location_services"
|
||||
android:title="@string/location_services_preference_title"
|
||||
settings:controller="com.android.settings.location.LocationInjectedServicesPreferenceController">
|
||||
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:fragment="com.android.settings.location.WifiScanningFragment"
|
||||
android:order="1000"
|
||||
android:key="location_services_wifi_scanning"
|
||||
android:title="@string/location_scanning_wifi_always_scanning_title"
|
||||
settings:controller="com.android.settings.location.LocationServicesWifiScanningPreferenceController"/>
|
||||
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
android:fragment="com.android.settings.location.BluetoothScanningFragment"
|
||||
android:order="1001"
|
||||
android:key="location_services_bluetooth_scanning"
|
||||
android:title="@string/location_scanning_bluetooth_always_scanning_title"
|
||||
settings:controller="com.android.settings.location.LocationServicesBluetoothScanningPreferenceController"/>
|
||||
|
@@ -16,12 +16,7 @@
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/location_services_screen_title">
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/managed_profile_location_services"
|
||||
android:layout="@layout/preference_category_no_label"
|
||||
android:key="location_services_managed_profile"
|
||||
settings:controller="com.android.settings.location.LocationInjectedServicesForWorkPreferenceController"/>
|
||||
|
||||
android:title="@string/location_services_screen_title"
|
||||
android:key="location_services_managed_profile"
|
||||
settings:controller="com.android.settings.location.LocationInjectedServicesForWorkPreferenceController">
|
||||
</PreferenceScreen>
|
||||
|
@@ -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;
|
||||
|
@@ -50,4 +50,9 @@ public class ProfileSelectLocationServicesFragment extends ProfileSelectFragment
|
||||
protected int getPreferenceScreenResId() {
|
||||
return R.xml.location_services_header;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean forceUpdateHeight() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -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<Integer, List<Preference>> prefs = getLocationServices();
|
||||
for (Map.Entry<Integer, List<Preference>> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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<Integer, List<Preference>> prefs = getLocationServices();
|
||||
for (Map.Entry<Integer, List<Preference>> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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<AbstractPreferenceController> 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<AbstractPreferenceController> buildPreferenceControllers(Context context) {
|
||||
final List<AbstractPreferenceController> 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<AbstractPreferenceController> createPreferenceControllers(Context
|
||||
context) {
|
||||
return buildPreferenceControllers(context);
|
||||
}
|
||||
};
|
||||
new BaseSearchIndexProvider(R.xml.location_services);
|
||||
}
|
||||
|
@@ -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<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||
return buildPreferenceControllers(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
use(LocationInjectedServicesForWorkPreferenceController.class).init(this);
|
||||
}
|
||||
|
||||
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
|
||||
final List<AbstractPreferenceController> 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<AbstractPreferenceController> createPreferenceControllers(Context
|
||||
context) {
|
||||
return buildPreferenceControllers(context);
|
||||
}
|
||||
};
|
||||
new BaseSearchIndexProvider(R.xml.location_services_workprofile);
|
||||
}
|
||||
|
Reference in New Issue
Block a user