1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.intentresolver; 18 19 import android.content.Context; 20 import android.os.UserHandle; 21 import android.view.LayoutInflater; 22 import android.view.ViewGroup; 23 import android.widget.ListView; 24 25 import androidx.viewpager.widget.PagerAdapter; 26 27 import com.android.internal.annotations.VisibleForTesting; 28 29 import com.google.common.collect.ImmutableList; 30 31 import java.util.Optional; 32 import java.util.function.Supplier; 33 34 /** 35 * A {@link PagerAdapter} which describes the work and personal profile intent resolver screens. 36 */ 37 @VisibleForTesting 38 public class ResolverMultiProfilePagerAdapter extends 39 GenericMultiProfilePagerAdapter<ListView, ResolverListAdapter, ResolverListAdapter> { 40 private final BottomPaddingOverrideSupplier mBottomPaddingOverrideSupplier; 41 ResolverMultiProfilePagerAdapter( Context context, ResolverListAdapter adapter, EmptyStateProvider emptyStateProvider, Supplier<Boolean> workProfileQuietModeChecker, UserHandle workProfileUserHandle)42 ResolverMultiProfilePagerAdapter( 43 Context context, 44 ResolverListAdapter adapter, 45 EmptyStateProvider emptyStateProvider, 46 Supplier<Boolean> workProfileQuietModeChecker, 47 UserHandle workProfileUserHandle) { 48 this( 49 context, 50 ImmutableList.of(adapter), 51 emptyStateProvider, 52 workProfileQuietModeChecker, 53 /* defaultProfile= */ 0, 54 workProfileUserHandle, 55 new BottomPaddingOverrideSupplier()); 56 } 57 ResolverMultiProfilePagerAdapter(Context context, ResolverListAdapter personalAdapter, ResolverListAdapter workAdapter, EmptyStateProvider emptyStateProvider, Supplier<Boolean> workProfileQuietModeChecker, @Profile int defaultProfile, UserHandle workProfileUserHandle)58 ResolverMultiProfilePagerAdapter(Context context, 59 ResolverListAdapter personalAdapter, 60 ResolverListAdapter workAdapter, 61 EmptyStateProvider emptyStateProvider, 62 Supplier<Boolean> workProfileQuietModeChecker, 63 @Profile int defaultProfile, 64 UserHandle workProfileUserHandle) { 65 this( 66 context, 67 ImmutableList.of(personalAdapter, workAdapter), 68 emptyStateProvider, 69 workProfileQuietModeChecker, 70 defaultProfile, 71 workProfileUserHandle, 72 new BottomPaddingOverrideSupplier()); 73 } 74 ResolverMultiProfilePagerAdapter( Context context, ImmutableList<ResolverListAdapter> listAdapters, EmptyStateProvider emptyStateProvider, Supplier<Boolean> workProfileQuietModeChecker, @Profile int defaultProfile, UserHandle workProfileUserHandle, BottomPaddingOverrideSupplier bottomPaddingOverrideSupplier)75 private ResolverMultiProfilePagerAdapter( 76 Context context, 77 ImmutableList<ResolverListAdapter> listAdapters, 78 EmptyStateProvider emptyStateProvider, 79 Supplier<Boolean> workProfileQuietModeChecker, 80 @Profile int defaultProfile, 81 UserHandle workProfileUserHandle, 82 BottomPaddingOverrideSupplier bottomPaddingOverrideSupplier) { 83 super( 84 context, 85 listAdapter -> listAdapter, 86 (listView, bindAdapter) -> listView.setAdapter(bindAdapter), 87 listAdapters, 88 emptyStateProvider, 89 workProfileQuietModeChecker, 90 defaultProfile, 91 workProfileUserHandle, 92 () -> (ViewGroup) LayoutInflater.from(context).inflate( 93 R.layout.resolver_list_per_profile, null, false), 94 bottomPaddingOverrideSupplier); 95 mBottomPaddingOverrideSupplier = bottomPaddingOverrideSupplier; 96 } 97 setUseLayoutWithDefault(boolean useLayoutWithDefault)98 public void setUseLayoutWithDefault(boolean useLayoutWithDefault) { 99 mBottomPaddingOverrideSupplier.setUseLayoutWithDefault(useLayoutWithDefault); 100 } 101 102 private static class BottomPaddingOverrideSupplier implements Supplier<Optional<Integer>> { 103 private boolean mUseLayoutWithDefault; 104 setUseLayoutWithDefault(boolean useLayoutWithDefault)105 public void setUseLayoutWithDefault(boolean useLayoutWithDefault) { 106 mUseLayoutWithDefault = useLayoutWithDefault; 107 } 108 109 @Override get()110 public Optional<Integer> get() { 111 return mUseLayoutWithDefault ? Optional.empty() : Optional.of(0); 112 } 113 } 114 } 115