1 /* 2 * Copyright (C) 2016 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 package com.android.settings.accounts; 17 18 import android.accounts.Account; 19 import android.app.Activity; 20 import android.content.Context; 21 import android.os.Bundle; 22 import android.os.UserHandle; 23 import android.os.UserManager; 24 import android.support.annotation.VisibleForTesting; 25 import android.support.v7.preference.Preference; 26 27 import android.support.v7.preference.PreferenceScreen; 28 import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 29 import com.android.settings.R; 30 import com.android.settings.Utils; 31 import com.android.settings.core.PreferenceController; 32 import com.android.settings.dashboard.DashboardFragment; 33 import com.android.settingslib.accounts.AuthenticatorHelper; 34 import com.android.settingslib.drawer.Tile; 35 36 import java.util.ArrayList; 37 import java.util.List; 38 39 public class AccountDetailDashboardFragment extends DashboardFragment { 40 41 private static final String TAG = "AccountDetailDashboard"; 42 private static final String METADATA_IA_ACCOUNT = "com.android.settings.ia.account"; 43 44 public static final String KEY_ACCOUNT = "account"; 45 public static final String KEY_ACCOUNT_TYPE = "account_type"; 46 public static final String KEY_ACCOUNT_LABEL = "account_label"; 47 public static final String KEY_ACCOUNT_TITLE_RES = "account_title_res"; 48 public static final String KEY_ACCOUNT_HEADER = "account_header"; 49 public static final String KEY_USER_HANDLE = "user_handle"; 50 51 @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) 52 Account mAccount; 53 private String mAccountLabel; 54 @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) 55 String mAccountType; 56 private AccountSyncPreferenceController mAccountSynController; 57 private RemoveAccountPreferenceController mRemoveAccountController; 58 59 @Override onCreate(Bundle icicle)60 public void onCreate(Bundle icicle) { 61 super.onCreate(icicle); 62 Bundle args = getArguments(); 63 final Activity activity = getActivity(); 64 UserHandle userHandle = Utils.getSecureTargetUser(activity.getActivityToken(), 65 (UserManager) getSystemService(Context.USER_SERVICE), args, 66 activity.getIntent().getExtras()); 67 if (args != null) { 68 if (args.containsKey(KEY_ACCOUNT)) { 69 mAccount = args.getParcelable(KEY_ACCOUNT); 70 } 71 if (args.containsKey(KEY_ACCOUNT_LABEL)) { 72 mAccountLabel = args.getString(KEY_ACCOUNT_LABEL); 73 } 74 if (args.containsKey(KEY_ACCOUNT_TYPE)) { 75 mAccountType = args.getString(KEY_ACCOUNT_TYPE); 76 } 77 } 78 mAccountSynController.init(mAccount, userHandle); 79 mRemoveAccountController.init(mAccount, userHandle); 80 } 81 82 @Override onActivityCreated(Bundle savedInstanceState)83 public void onActivityCreated(Bundle savedInstanceState) { 84 super.onActivityCreated(savedInstanceState); 85 if (mAccountLabel != null) { 86 getActivity().setTitle(mAccountLabel); 87 } 88 updateUi(); 89 } 90 91 @Override getMetricsCategory()92 public int getMetricsCategory() { 93 return MetricsEvent.ACCOUNT; 94 } 95 96 @Override getLogTag()97 protected String getLogTag() { 98 return TAG; 99 } 100 101 @Override getPreferenceScreenResId()102 protected int getPreferenceScreenResId() { 103 return R.xml.account_type_settings; 104 } 105 106 @Override getPreferenceControllers(Context context)107 protected List<PreferenceController> getPreferenceControllers(Context context) { 108 final List<PreferenceController> controllers = new ArrayList<>(); 109 mAccountSynController = new AccountSyncPreferenceController(context); 110 controllers.add(mAccountSynController); 111 mRemoveAccountController = new RemoveAccountPreferenceController(context, this); 112 controllers.add(mRemoveAccountController); 113 return controllers; 114 } 115 116 @Override displayTile(Tile tile)117 protected boolean displayTile(Tile tile) { 118 if (mAccountType == null) { 119 return false; 120 } 121 final Bundle metadata = tile.metaData; 122 if (metadata == null) { 123 return false; 124 } 125 return mAccountType.equals(metadata.getString(METADATA_IA_ACCOUNT)); 126 } 127 128 @VisibleForTesting updateUi()129 void updateUi() { 130 final Preference headerPreference = findPreference(KEY_ACCOUNT_HEADER); 131 headerPreference.setTitle(mAccount.name); 132 final Context context = getContext(); 133 UserHandle userHandle = null; 134 Bundle args = getArguments(); 135 if (args != null && args.containsKey(KEY_USER_HANDLE)) { 136 userHandle = args.getParcelable(KEY_USER_HANDLE); 137 } 138 final AuthenticatorHelper helper = new AuthenticatorHelper(context, userHandle, null); 139 headerPreference.setIcon(helper.getDrawableForType(context, mAccountType)); 140 final AccountTypePreferenceLoader accountTypePreferenceLoader = 141 new AccountTypePreferenceLoader(this, helper, userHandle); 142 PreferenceScreen prefs = 143 accountTypePreferenceLoader.addPreferencesForType(mAccountType, getPreferenceScreen()); 144 if (prefs != null) { 145 accountTypePreferenceLoader.updatePreferenceIntents(prefs, mAccountType, mAccount); 146 } 147 } 148 149 }