1a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa/* 2a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * Copyright (C) 2008 The Android Open Source Project 3a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * 4a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 5a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * you may not use this file except in compliance with the License. 6a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * You may obtain a copy of the License at 7a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * 8a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 9a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * 10a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 11a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 12a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * See the License for the specific language governing permissions and 14a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * limitations under the License. 15a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa */ 16a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 17a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawapackage com.android.settings; 18a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 19a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport java.util.ArrayList; 20a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 21a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.accounts.Account; 22a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.content.Context; 23a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.graphics.drawable.Drawable; 24a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.preference.Preference; 25a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.util.Log; 26a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.view.View; 27a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawaimport android.widget.ImageView; 28a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 29a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa/** 30a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * AccountPreference is used to display a username, status and provider icon for an account on 31a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa * the device. 32a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa */ 33a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawapublic class AccountPreference extends Preference { 34a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private static final String TAG = "AccountPreference"; 35a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public static final int SYNC_ENABLED = 0; // all know sync adapters are enabled and OK 36a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public static final int SYNC_DISABLED = 1; // no sync adapters are enabled 37a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public static final int SYNC_ERROR = 2; // one or more sync adapters have a problem 38d1ab82807aae63926b35f66080a1f7a75c00b95bAmith Yamasani public static final int SYNC_IN_PROGRESS = 3; // currently syncing 39a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private int mStatus; 40a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private Account mAccount; 41a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private ArrayList<String> mAuthorities; 4286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private ImageView mSyncStatusIcon; 4386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani private boolean mShowTypeIcon; 44a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 45a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public AccountPreference(Context context, Account account, Drawable icon, 4686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani ArrayList<String> authorities, boolean showTypeIcon) { 47a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa super(context); 48a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa mAccount = account; 49a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa mAuthorities = authorities; 5086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mShowTypeIcon = showTypeIcon; 5186708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (showTypeIcon) { 5286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani setIcon(icon); 5386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } else { 5486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani setIcon(getSyncStatusIcon(SYNC_DISABLED)); 5586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 56a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa setTitle(mAccount.name); 57a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa setSummary(""); 58a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa setPersistent(false); 5986708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani setSyncStatus(SYNC_DISABLED, false); 60a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 61a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 62a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public Account getAccount() { 63a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa return mAccount; 64a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 65a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 66a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa public ArrayList<String> getAuthorities() { 67a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa return mAuthorities; 68a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 69a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 70a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa @Override 71a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa protected void onBindView(View view) { 72a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa super.onBindView(view); 7386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (!mShowTypeIcon) { 7486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mSyncStatusIcon = (ImageView) view.findViewById(android.R.id.icon); 7586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mSyncStatusIcon.setImageResource(getSyncStatusIcon(mStatus)); 7686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mSyncStatusIcon.setContentDescription(getSyncContentDescription(mStatus)); 7786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 78a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 79a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 8086708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani public void setSyncStatus(int status, boolean updateSummary) { 81a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa mStatus = status; 8286708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (!mShowTypeIcon && mSyncStatusIcon != null) { 8386708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mSyncStatusIcon.setImageResource(getSyncStatusIcon(status)); 8486708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani mSyncStatusIcon.setContentDescription(getSyncContentDescription(mStatus)); 8586708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 8686708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani if (updateSummary) { 8786708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani setSummary(getSyncStatusMessage(status)); 8886708a8a6da3d2da4547750ce67a89744a2878a1Amith Yamasani } 89a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 90a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 91a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private int getSyncStatusMessage(int status) { 92a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa int res; 93a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa switch (status) { 94a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_ENABLED: 95a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa res = R.string.sync_enabled; 96a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 97a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_DISABLED: 98a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa res = R.string.sync_disabled; 99a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 100a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_ERROR: 101a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa res = R.string.sync_error; 102a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 103d1ab82807aae63926b35f66080a1f7a75c00b95bAmith Yamasani case SYNC_IN_PROGRESS: 104d1ab82807aae63926b35f66080a1f7a75c00b95bAmith Yamasani res = R.string.sync_in_progress; 105d1ab82807aae63926b35f66080a1f7a75c00b95bAmith Yamasani break; 106a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa default: 107a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa res = R.string.sync_error; 108a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa Log.e(TAG, "Unknown sync status: " + status); 109a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 110a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa return res; 111a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 112a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 113a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa private int getSyncStatusIcon(int status) { 114a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa int res; 115a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa switch (status) { 116a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_ENABLED: 1172d499533b70072a914542b84e9cc8bdb8aca78d8Jason Monk case SYNC_IN_PROGRESS: 1182d499533b70072a914542b84e9cc8bdb8aca78d8Jason Monk res = R.drawable.ic_settings_sync; 119a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 120a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_DISABLED: 1217a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7dJeff Sharkey res = R.drawable.ic_sync_grey_holo; 122a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 123a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa case SYNC_ERROR: 1247a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7dJeff Sharkey res = R.drawable.ic_sync_red_holo; 125a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa break; 126a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa default: 1277a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7dJeff Sharkey res = R.drawable.ic_sync_red_holo; 128a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa Log.e(TAG, "Unknown sync status: " + status); 129a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 130a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa return res; 131a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa } 132a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa 1330ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov private String getSyncContentDescription(int status) { 1340ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov switch (status) { 1350ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov case SYNC_ENABLED: 1360ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov return getContext().getString(R.string.accessibility_sync_enabled); 1370ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov case SYNC_DISABLED: 1380ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov return getContext().getString(R.string.accessibility_sync_disabled); 1390ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov case SYNC_ERROR: 1400ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov return getContext().getString(R.string.accessibility_sync_error); 141a14cfda8fc8c68471ac2926dff9d8bc9f943a892Alexandra Gherghina case SYNC_IN_PROGRESS: 142a14cfda8fc8c68471ac2926dff9d8bc9f943a892Alexandra Gherghina return getContext().getString(R.string.accessibility_sync_in_progress); 1430ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov default: 1440ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov Log.e(TAG, "Unknown sync status: " + status); 1450ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov return getContext().getString(R.string.accessibility_sync_error); 1460ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov } 1470ceb6ad890a341a9edda7b000aea0725c61380d4Svetoslav Ganov } 148a2633d0232adefd2767484add759a46906e00bccDaisuke Miyakawa} 149