• 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.internal.app;
18 
19 import android.annotation.Nullable;
20 import android.content.Context;
21 import android.os.UserHandle;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 import android.widget.ListView;
26 
27 import com.android.internal.R;
28 import com.android.internal.annotations.VisibleForTesting;
29 import com.android.internal.widget.PagerAdapter;
30 
31 /**
32  * A {@link PagerAdapter} which describes the work and personal profile intent resolver screens.
33  */
34 @VisibleForTesting
35 public class ResolverMultiProfilePagerAdapter extends AbstractMultiProfilePagerAdapter {
36 
37     private final ResolverProfileDescriptor[] mItems;
38     private boolean mUseLayoutWithDefault;
39 
ResolverMultiProfilePagerAdapter(Context context, ResolverListAdapter adapter, EmptyStateProvider emptyStateProvider, QuietModeManager quietModeManager, UserHandle workProfileUserHandle)40     ResolverMultiProfilePagerAdapter(Context context,
41             ResolverListAdapter adapter,
42             EmptyStateProvider emptyStateProvider,
43             QuietModeManager quietModeManager,
44             UserHandle workProfileUserHandle) {
45         super(context, /* currentPage */ 0, emptyStateProvider, quietModeManager,
46                 workProfileUserHandle);
47         mItems = new ResolverProfileDescriptor[] {
48                 createProfileDescriptor(adapter)
49         };
50     }
51 
ResolverMultiProfilePagerAdapter(Context context, ResolverListAdapter personalAdapter, ResolverListAdapter workAdapter, EmptyStateProvider emptyStateProvider, QuietModeManager quietModeManager, @Profile int defaultProfile, UserHandle workProfileUserHandle)52     ResolverMultiProfilePagerAdapter(Context context,
53             ResolverListAdapter personalAdapter,
54             ResolverListAdapter workAdapter,
55             EmptyStateProvider emptyStateProvider,
56             QuietModeManager quietModeManager,
57             @Profile int defaultProfile,
58             UserHandle workProfileUserHandle) {
59         super(context, /* currentPage */ defaultProfile, emptyStateProvider, quietModeManager,
60                 workProfileUserHandle);
61         mItems = new ResolverProfileDescriptor[] {
62                 createProfileDescriptor(personalAdapter),
63                 createProfileDescriptor(workAdapter)
64         };
65     }
66 
createProfileDescriptor( ResolverListAdapter adapter)67     private ResolverProfileDescriptor createProfileDescriptor(
68             ResolverListAdapter adapter) {
69         final LayoutInflater inflater = LayoutInflater.from(getContext());
70         final ViewGroup rootView =
71                 (ViewGroup) inflater.inflate(R.layout.resolver_list_per_profile, null, false);
72         return new ResolverProfileDescriptor(rootView, adapter);
73     }
74 
getListViewForIndex(int index)75     ListView getListViewForIndex(int index) {
76         return getItem(index).listView;
77     }
78 
79     @Override
getItem(int pageIndex)80     ResolverProfileDescriptor getItem(int pageIndex) {
81         return mItems[pageIndex];
82     }
83 
84     @Override
getItemCount()85     int getItemCount() {
86         return mItems.length;
87     }
88 
89     @Override
setupListAdapter(int pageIndex)90     void setupListAdapter(int pageIndex) {
91         final ListView listView = getItem(pageIndex).listView;
92         listView.setAdapter(getItem(pageIndex).resolverListAdapter);
93     }
94 
95     @Override
96     @VisibleForTesting
getAdapterForIndex(int pageIndex)97     public ResolverListAdapter getAdapterForIndex(int pageIndex) {
98         return mItems[pageIndex].resolverListAdapter;
99     }
100 
101     @Override
instantiateItem(ViewGroup container, int position)102     public ViewGroup instantiateItem(ViewGroup container, int position) {
103         setupListAdapter(position);
104         return super.instantiateItem(container, position);
105     }
106 
107     @Override
108     @Nullable
getListAdapterForUserHandle(UserHandle userHandle)109     ResolverListAdapter getListAdapterForUserHandle(UserHandle userHandle) {
110         if (getActiveListAdapter().getUserHandle().equals(userHandle)) {
111             return getActiveListAdapter();
112         } else if (getInactiveListAdapter() != null
113                 && getInactiveListAdapter().getUserHandle().equals(userHandle)) {
114             return getInactiveListAdapter();
115         }
116         return null;
117     }
118 
119     @Override
120     @VisibleForTesting
getActiveListAdapter()121     public ResolverListAdapter getActiveListAdapter() {
122         return getAdapterForIndex(getCurrentPage());
123     }
124 
125     @Override
126     @VisibleForTesting
getInactiveListAdapter()127     public ResolverListAdapter getInactiveListAdapter() {
128         if (getCount() == 1) {
129             return null;
130         }
131         return getAdapterForIndex(1 - getCurrentPage());
132     }
133 
134     @Override
getPersonalListAdapter()135     public ResolverListAdapter getPersonalListAdapter() {
136         return getAdapterForIndex(PROFILE_PERSONAL);
137     }
138 
139     @Override
140     @Nullable
getWorkListAdapter()141     public ResolverListAdapter getWorkListAdapter() {
142         return getAdapterForIndex(PROFILE_WORK);
143     }
144 
145     @Override
getCurrentRootAdapter()146     ResolverListAdapter getCurrentRootAdapter() {
147         return getActiveListAdapter();
148     }
149 
150     @Override
getActiveAdapterView()151     ListView getActiveAdapterView() {
152         return getListViewForIndex(getCurrentPage());
153     }
154 
155     @Override
156     @Nullable
getInactiveAdapterView()157     ViewGroup getInactiveAdapterView() {
158         if (getCount() == 1) {
159             return null;
160         }
161         return getListViewForIndex(1 - getCurrentPage());
162     }
163 
setUseLayoutWithDefault(boolean useLayoutWithDefault)164     void setUseLayoutWithDefault(boolean useLayoutWithDefault) {
165         mUseLayoutWithDefault = useLayoutWithDefault;
166     }
167 
168     @Override
setupContainerPadding(View container)169     protected void setupContainerPadding(View container) {
170         int bottom = mUseLayoutWithDefault ? container.getPaddingBottom() : 0;
171         container.setPadding(container.getPaddingLeft(), container.getPaddingTop(),
172                 container.getPaddingRight(), bottom);
173     }
174 
175     class ResolverProfileDescriptor extends ProfileDescriptor {
176         private ResolverListAdapter resolverListAdapter;
177         final ListView listView;
ResolverProfileDescriptor(ViewGroup rootView, ResolverListAdapter adapter)178         ResolverProfileDescriptor(ViewGroup rootView, ResolverListAdapter adapter) {
179             super(rootView);
180             resolverListAdapter = adapter;
181             listView = rootView.findViewById(R.id.resolver_list);
182         }
183     }
184 }
185