• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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