126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov/*
226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov *
426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * you may not use this file except in compliance with the License.
626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * You may obtain a copy of the License at
726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov *
826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov *
1026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
1126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
1226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * See the License for the specific language governing permissions and
1426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * limitations under the License.
1526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov */
1626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
1726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovpackage com.android.contacts;
1826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
1926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.accounts.Account;
2026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.accounts.AccountManager;
2126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.content.ContentResolver;
2226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.content.Context;
2326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.content.IContentService;
2426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.os.RemoteException;
2526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.provider.ContactsContract;
2626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.telephony.TelephonyManager;
2726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.util.AttributeSet;
2826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.util.Log;
2926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.widget.ScrollView;
3026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovimport android.widget.TextView;
3126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
3226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov/**
3326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov * Displays a message when there is nothing to display in a contact list.
3426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov */
3526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikovpublic class ContactListEmptyView extends ScrollView {
3626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
3726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    private static final String TAG = "ContactListEmptyView";
3826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
3926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    public ContactListEmptyView(Context context, AttributeSet attrs) {
4026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        super(context, attrs);
4126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    }
4226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
4326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    public void hide() {
4426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        TextView empty = (TextView) findViewById(R.id.emptyText);
4526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        empty.setVisibility(GONE);
4626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    }
4726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
48807a0fe5e54980b1cd8e97590d5b465ca9d6dea5Dmitri Plotnikov    public void show(boolean searchMode, boolean displayOnlyPhones,
4926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            boolean isFavoritesMode, boolean isQueryMode, boolean isShortcutAction,
5026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            boolean isMultipleSelectionEnabled, boolean showSelectedOnly) {
5126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        if (searchMode) {
5226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            return;
5326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        }
5426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
5526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        TextView empty = (TextView) findViewById(R.id.emptyText);
5626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        Context context = getContext();
5726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        if (displayOnlyPhones) {
5826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            empty.setText(context.getText(R.string.noContactsWithPhoneNumbers));
5926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        } else if (isFavoritesMode) {
6026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            empty.setText(context.getText(R.string.noFavoritesHelpText));
6126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        } else if (isQueryMode) {
6226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            empty.setText(context.getText(R.string.noMatchingContacts));
6326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        } if (isMultipleSelectionEnabled) {
6426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            if (showSelectedOnly) {
6526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                empty.setText(context.getText(R.string.no_contacts_selected));
6626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            } else {
6726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                empty.setText(context.getText(R.string.noContactsWithPhoneNumbers));
6826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            }
6926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        } else {
7026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            TelephonyManager telephonyManager =
7126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
7226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            boolean hasSim = telephonyManager.hasIccCard();
7326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            if (isSyncActive()) {
7426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                if (isShortcutAction) {
7526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    // Help text is the same no matter whether there is SIM or not.
7626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(
7726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                            context.getText(R.string.noContactsHelpTextWithSyncForCreateShortcut));
7826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                } else if (hasSim) {
7926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(context.getText(R.string.noContactsHelpTextWithSync));
8026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                } else {
8126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(context.getText(R.string.noContactsNoSimHelpTextWithSync));
8226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                }
8326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            } else {
8426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                if (isShortcutAction) {
8526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    // Help text is the same no matter whether there is SIM or not.
8626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(context.getText(R.string.noContactsHelpTextForCreateShortcut));
8726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                } else if (hasSim) {
8826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(context.getText(R.string.noContactsHelpText));
8926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                } else {
9026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    empty.setText(context.getText(R.string.noContactsNoSimHelpText));
9126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                }
9226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            }
9326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        }
9426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        empty.setVisibility(VISIBLE);
9526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    }
9626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov
9726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    private boolean isSyncActive() {
9826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        Account[] accounts = AccountManager.get(getContext()).getAccounts();
9926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        if (accounts != null && accounts.length > 0) {
10026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            IContentService contentService = ContentResolver.getContentService();
10126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            for (Account account : accounts) {
10226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                try {
10326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    if (contentService.isSyncActive(account, ContactsContract.AUTHORITY)) {
10426cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                        return true;
10526cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    }
10626cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                } catch (RemoteException e) {
10726cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                    Log.e(TAG, "Could not get the sync status");
10826cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov                }
10926cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov            }
11026cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        }
11126cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov        return false;
11226cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov    }
11326cda1a38eb348cf4e7d17a711d420207c66d45dDmitri Plotnikov}
114