• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.settings.accounts;
18 
19 import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_ACCOUNT;
20 import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_USER_HANDLE;
21 
22 import android.accounts.Account;
23 import android.app.Activity;
24 import android.content.Context;
25 import android.os.Bundle;
26 import android.os.UserHandle;
27 
28 import androidx.preference.PreferenceFragmentCompat;
29 import androidx.preference.PreferenceScreen;
30 
31 import com.android.settings.R;
32 import com.android.settings.core.PreferenceControllerMixin;
33 import com.android.settings.widget.EntityHeaderController;
34 import com.android.settingslib.accounts.AuthenticatorHelper;
35 import com.android.settingslib.core.AbstractPreferenceController;
36 import com.android.settingslib.core.lifecycle.Lifecycle;
37 import com.android.settingslib.core.lifecycle.LifecycleObserver;
38 import com.android.settingslib.core.lifecycle.events.OnResume;
39 import com.android.settingslib.widget.LayoutPreference;
40 
41 public class AccountHeaderPreferenceController extends AbstractPreferenceController
42         implements PreferenceControllerMixin, LifecycleObserver, OnResume {
43 
44     private static final String KEY_ACCOUNT_HEADER = "account_header";
45 
46     private final Activity mActivity;
47     private final PreferenceFragmentCompat mHost;
48     private final Account mAccount;
49     private final UserHandle mUserHandle;
50 
51     private LayoutPreference mHeaderPreference;
52 
AccountHeaderPreferenceController(Context context, Lifecycle lifecycle, Activity activity, PreferenceFragmentCompat host, Bundle args)53     public AccountHeaderPreferenceController(Context context, Lifecycle lifecycle,
54             Activity activity, PreferenceFragmentCompat host, Bundle args) {
55         super(context);
56         mActivity = activity;
57         mHost = host;
58         if (args != null && args.containsKey(KEY_ACCOUNT)) {
59             mAccount = args.getParcelable(KEY_ACCOUNT);
60         } else {
61             mAccount = null;
62         }
63 
64         if (args != null && args.containsKey(KEY_USER_HANDLE)) {
65             mUserHandle = args.getParcelable(KEY_USER_HANDLE);
66         } else {
67             mUserHandle = null;
68         }
69         if (lifecycle != null) {
70             lifecycle.addObserver(this);
71         }
72     }
73 
74     @Override
isAvailable()75     public boolean isAvailable() {
76         return mAccount != null && mUserHandle != null;
77     }
78 
79     @Override
getPreferenceKey()80     public String getPreferenceKey() {
81         return KEY_ACCOUNT_HEADER;
82     }
83 
84     @Override
displayPreference(PreferenceScreen screen)85     public void displayPreference(PreferenceScreen screen) {
86         super.displayPreference(screen);
87         mHeaderPreference = screen.findPreference(KEY_ACCOUNT_HEADER);
88     }
89 
90     @Override
onResume()91     public void onResume() {
92         final AuthenticatorHelper helper = new AuthenticatorHelper(mContext, mUserHandle, null);
93 
94         EntityHeaderController
95                 .newInstance(mActivity, mHost, mHeaderPreference.findViewById(R.id.entity_header))
96                 .setLabel(mAccount.name)
97                 .setIcon(helper.getDrawableForType(mContext, mAccount.type))
98                 .done(mActivity, true /* rebindButtons */);
99     }
100 }
101