1bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling/* 2bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Copyright (C) 2016 The Android Open Source Project 3bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * 4bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 5bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * you may not use this file except in compliance with the License. 6bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * You may obtain a copy of the License at 7bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * 8bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * http://www.apache.org/licenses/LICENSE-2.0 9bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * 10bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Unless required by applicable law or agreed to in writing, software 11bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * distributed under the License is distributed on an "AS IS" BASIS, 12bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * See the License for the specific language governing permissions and 14bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * limitations under the License. 15bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 16bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 17bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingpackage com.android.settings.accounts; 18bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 19ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhangimport android.accounts.Account; 20bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.content.Context; 21bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.graphics.drawable.Drawable; 22bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.os.Bundle; 23bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.os.UserHandle; 24bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.os.UserManager; 25bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.support.v7.preference.Preference; 26bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport android.support.v7.preference.Preference.OnPreferenceClickListener; 27bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 28bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport com.android.settings.R; 29bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport com.android.settings.Utils; 30bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 31bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Lingimport static android.content.Intent.EXTRA_USER; 32bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 3320d4b041f7870796f4f186729add8cd1b42f2dddDoris Lingpublic class AccountTypePreference extends Preference implements OnPreferenceClickListener { 34bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling /** 35bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Title of the tile that is shown to the user. 36bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * @attr ref android.R.styleable#PreferenceHeader_title 37bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 38bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling private final CharSequence mTitle; 39bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 40bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling /** 41bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Packange name used to resolve the resources of the title shown to the user in the new 42bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * fragment. 43bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 44bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling private final String mTitleResPackageName; 45bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 46bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling /** 47bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Resource id of the title shown to the user in the new fragment. 48bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 49bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling private final int mTitleResId; 50bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 51bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling /** 5220d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling * Summary of the tile that is shown to the user. 5320d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling */ 5420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling private final CharSequence mSummary; 5520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling 5620d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling /** 57bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Full class name of the fragment to display when this tile is 58bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * selected. 59bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * @attr ref android.R.styleable#PreferenceHeader_fragment 60bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 61bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling private final String mFragment; 62bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 63bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling /** 64bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * Optional arguments to supply to the fragment when it is 65bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling * instantiated. 66bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling */ 67bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling private final Bundle mFragmentArguments; 68bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 69c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang private final int mMetricsCategory; 70c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang 71ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang public AccountTypePreference(Context context, int metricsCategory, Account account, 72c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang String titleResPackageName, int titleResId, CharSequence summary, String fragment, 73c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang Bundle fragmentArguments, Drawable icon) { 74bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling super(context); 75ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang mTitle = account.name; 76bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling mTitleResPackageName = titleResPackageName; 77bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling mTitleResId = titleResId; 7820d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling mSummary = summary; 79bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling mFragment = fragment; 80bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling mFragmentArguments = fragmentArguments; 81c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang mMetricsCategory = metricsCategory; 82bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling setWidgetLayoutResource(R.layout.account_type_preference); 83bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 84ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang setKey(buildKey(account)); 85ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang setTitle(mTitle); 8620d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling setSummary(summary); 87bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling setIcon(icon); 88bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 89bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling setOnPreferenceClickListener(this); 90bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } 91bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 92bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling @Override 93bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling public boolean onPreferenceClick(Preference preference) { 94bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling if (mFragment != null) { 95bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling UserManager userManager = 96bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling (UserManager) getContext().getSystemService(Context.USER_SERVICE); 97bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling UserHandle user = mFragmentArguments.getParcelable(EXTRA_USER); 98bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling if (user != null && Utils.startQuietModeDialogIfNecessary(getContext(), userManager, 99bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling user.getIdentifier())) { 100bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling return true; 101bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } else if (user != null && Utils.unlockWorkProfileIfNecessary(getContext(), 102bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling user.getIdentifier())) { 103bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling return true; 104bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } 105bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling Utils.startWithFragment(getContext(), mFragment, mFragmentArguments, 106bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling null /* resultTo */, 0 /* resultRequestCode */, mTitleResPackageName, 107c6ca314c0b872f75926807ca7d6eb24ebe7cb684Fan Zhang mTitleResId, null /* title */, mMetricsCategory); 108bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling return true; 109bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } 110bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling return false; 111bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } 112bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 113ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang /** 114ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang * Build a unique preference key based on account. 115ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang */ 116ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang public static String buildKey(Account account) { 117ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang return String.valueOf(account.hashCode()); 118ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang } 119ff67503b581e8535f06a53c6f479e446cc2f1638Fan Zhang 12020d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling public CharSequence getTitle() { 121bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling return mTitle; 122bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling } 123bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling 12420d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling public CharSequence getSummary() { 12520d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling return mSummary; 12620d4b041f7870796f4f186729add8cd1b42f2dddDoris Ling } 127bfac31b517e1fa2f217fe932192ecd0c57b33525Doris Ling} 128