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, UserHandle cloneProfileUserHandle)42 ResolverMultiProfilePagerAdapter( 43 Context context, 44 ResolverListAdapter adapter, 45 EmptyStateProvider emptyStateProvider, 46 Supplier<Boolean> workProfileQuietModeChecker, 47 UserHandle workProfileUserHandle, 48 UserHandle cloneProfileUserHandle) { 49 this( 50 context, 51 ImmutableList.of(adapter), 52 emptyStateProvider, 53 workProfileQuietModeChecker, 54 /* defaultProfile= */ 0, 55 workProfileUserHandle, 56 cloneProfileUserHandle, 57 new BottomPaddingOverrideSupplier()); 58 } 59 ResolverMultiProfilePagerAdapter(Context context, ResolverListAdapter personalAdapter, ResolverListAdapter workAdapter, EmptyStateProvider emptyStateProvider, Supplier<Boolean> workProfileQuietModeChecker, @Profile int defaultProfile, UserHandle workProfileUserHandle, UserHandle cloneProfileUserHandle)60 ResolverMultiProfilePagerAdapter(Context context, 61 ResolverListAdapter personalAdapter, 62 ResolverListAdapter workAdapter, 63 EmptyStateProvider emptyStateProvider, 64 Supplier<Boolean> workProfileQuietModeChecker, 65 @Profile int defaultProfile, 66 UserHandle workProfileUserHandle, 67 UserHandle cloneProfileUserHandle) { 68 this( 69 context, 70 ImmutableList.of(personalAdapter, workAdapter), 71 emptyStateProvider, 72 workProfileQuietModeChecker, 73 defaultProfile, 74 workProfileUserHandle, 75 cloneProfileUserHandle, 76 new BottomPaddingOverrideSupplier()); 77 } 78 ResolverMultiProfilePagerAdapter( Context context, ImmutableList<ResolverListAdapter> listAdapters, EmptyStateProvider emptyStateProvider, Supplier<Boolean> workProfileQuietModeChecker, @Profile int defaultProfile, UserHandle workProfileUserHandle, UserHandle cloneProfileUserHandle, BottomPaddingOverrideSupplier bottomPaddingOverrideSupplier)79 private ResolverMultiProfilePagerAdapter( 80 Context context, 81 ImmutableList<ResolverListAdapter> listAdapters, 82 EmptyStateProvider emptyStateProvider, 83 Supplier<Boolean> workProfileQuietModeChecker, 84 @Profile int defaultProfile, 85 UserHandle workProfileUserHandle, 86 UserHandle cloneProfileUserHandle, 87 BottomPaddingOverrideSupplier bottomPaddingOverrideSupplier) { 88 super( 89 context, 90 listAdapter -> listAdapter, 91 (listView, bindAdapter) -> listView.setAdapter(bindAdapter), 92 listAdapters, 93 emptyStateProvider, 94 workProfileQuietModeChecker, 95 defaultProfile, 96 workProfileUserHandle, 97 cloneProfileUserHandle, 98 () -> (ViewGroup) LayoutInflater.from(context).inflate( 99 R.layout.resolver_list_per_profile, null, false), 100 bottomPaddingOverrideSupplier); 101 mBottomPaddingOverrideSupplier = bottomPaddingOverrideSupplier; 102 } 103 setUseLayoutWithDefault(boolean useLayoutWithDefault)104 public void setUseLayoutWithDefault(boolean useLayoutWithDefault) { 105 mBottomPaddingOverrideSupplier.setUseLayoutWithDefault(useLayoutWithDefault); 106 } 107 108 private static class BottomPaddingOverrideSupplier implements Supplier<Optional<Integer>> { 109 private boolean mUseLayoutWithDefault; 110 setUseLayoutWithDefault(boolean useLayoutWithDefault)111 public void setUseLayoutWithDefault(boolean useLayoutWithDefault) { 112 mUseLayoutWithDefault = useLayoutWithDefault; 113 } 114 115 @Override get()116 public Optional<Integer> get() { 117 return mUseLayoutWithDefault ? Optional.empty() : Optional.of(0); 118 } 119 } 120 } 121