12644d947574240b71c427d457f7a775dc160ec09Yorke Lee/*
22644d947574240b71c427d457f7a775dc160ec09Yorke Lee * Copyright (C) 2010 The Android Open Source Project
32644d947574240b71c427d457f7a775dc160ec09Yorke Lee *
42644d947574240b71c427d457f7a775dc160ec09Yorke Lee * Licensed under the Apache License, Version 2.0 (the "License");
52644d947574240b71c427d457f7a775dc160ec09Yorke Lee * you may not use this file except in compliance with the License.
62644d947574240b71c427d457f7a775dc160ec09Yorke Lee * You may obtain a copy of the License at
72644d947574240b71c427d457f7a775dc160ec09Yorke Lee *
82644d947574240b71c427d457f7a775dc160ec09Yorke Lee *      http://www.apache.org/licenses/LICENSE-2.0
92644d947574240b71c427d457f7a775dc160ec09Yorke Lee *
102644d947574240b71c427d457f7a775dc160ec09Yorke Lee * Unless required by applicable law or agreed to in writing, software
112644d947574240b71c427d457f7a775dc160ec09Yorke Lee * distributed under the License is distributed on an "AS IS" BASIS,
122644d947574240b71c427d457f7a775dc160ec09Yorke Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132644d947574240b71c427d457f7a775dc160ec09Yorke Lee * See the License for the specific language governing permissions and
142644d947574240b71c427d457f7a775dc160ec09Yorke Lee * limitations under the License.
152644d947574240b71c427d457f7a775dc160ec09Yorke Lee */
160a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maipackage com.android.contacts.test.mocks;
172644d947574240b71c427d457f7a775dc160ec09Yorke Lee
1856c8a0cce9ea98e0f088e74474a57968a02810abWenyi Wangimport android.accounts.Account;
1956c8a0cce9ea98e0f088e74474a57968a02810abWenyi Wang
2069c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.AccountTypeManager;
2175895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerottimport com.android.contacts.model.account.AccountInfo;
2269c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountType;
2369c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountTypeWithDataSet;
2469c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet;
2569c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.BaseAccountType;
262644d947574240b71c427d457f7a775dc160ec09Yorke Leeimport com.google.common.base.Objects;
2767a0639c912ce5bed209d791f0bf8d09853bdbbdMarcus Hagerottimport com.google.common.base.Predicate;
2804be88c2bec8d0a0cc9e1f4f0af3b3a2ff8ac4e7Marcus Hagerottimport com.google.common.util.concurrent.ListenableFuture;
292644d947574240b71c427d457f7a775dc160ec09Yorke Lee
302644d947574240b71c427d457f7a775dc160ec09Yorke Leeimport java.util.Arrays;
312644d947574240b71c427d457f7a775dc160ec09Yorke Leeimport java.util.List;
322644d947574240b71c427d457f7a775dc160ec09Yorke Lee
332644d947574240b71c427d457f7a775dc160ec09Yorke Lee/**
342644d947574240b71c427d457f7a775dc160ec09Yorke Lee * A mock {@link AccountTypeManager} class.
352644d947574240b71c427d457f7a775dc160ec09Yorke Lee */
362644d947574240b71c427d457f7a775dc160ec09Yorke Leepublic class MockAccountTypeManager extends AccountTypeManager {
372644d947574240b71c427d457f7a775dc160ec09Yorke Lee
382644d947574240b71c427d457f7a775dc160ec09Yorke Lee    public AccountType[] mTypes;
392644d947574240b71c427d457f7a775dc160ec09Yorke Lee    public AccountWithDataSet[] mAccounts;
402644d947574240b71c427d457f7a775dc160ec09Yorke Lee
412644d947574240b71c427d457f7a775dc160ec09Yorke Lee    public MockAccountTypeManager(AccountType[] types, AccountWithDataSet[] accounts) {
422644d947574240b71c427d457f7a775dc160ec09Yorke Lee        this.mTypes = types;
432644d947574240b71c427d457f7a775dc160ec09Yorke Lee        this.mAccounts = accounts;
442644d947574240b71c427d457f7a775dc160ec09Yorke Lee    }
452644d947574240b71c427d457f7a775dc160ec09Yorke Lee
462644d947574240b71c427d457f7a775dc160ec09Yorke Lee    @Override
472644d947574240b71c427d457f7a775dc160ec09Yorke Lee    public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
487958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu        // Add fallback accountType to mimic the behavior of AccountTypeManagerImpl
497958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu        AccountType mFallbackAccountType = new BaseAccountType() {
507958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu            @Override
517958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu            public boolean areContactsWritable() {
527958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu                return false;
537958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu            }
547958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu        };
557958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu        mFallbackAccountType.accountType = "fallback";
562644d947574240b71c427d457f7a775dc160ec09Yorke Lee        for (AccountType type : mTypes) {
572644d947574240b71c427d457f7a775dc160ec09Yorke Lee            if (Objects.equal(accountTypeWithDataSet.accountType, type.accountType)
582644d947574240b71c427d457f7a775dc160ec09Yorke Lee                    && Objects.equal(accountTypeWithDataSet.dataSet, type.dataSet)) {
592644d947574240b71c427d457f7a775dc160ec09Yorke Lee                return type;
602644d947574240b71c427d457f7a775dc160ec09Yorke Lee            }
612644d947574240b71c427d457f7a775dc160ec09Yorke Lee        }
627958e584f79208156771671b3e1a102e2e2f47b4Zheng Fu        return mFallbackAccountType;
632644d947574240b71c427d457f7a775dc160ec09Yorke Lee    }
642644d947574240b71c427d457f7a775dc160ec09Yorke Lee
652644d947574240b71c427d457f7a775dc160ec09Yorke Lee    @Override
66107cd7a225eccad56dfe12ca6d32908e651b27acMarcus Hagerott    public List<AccountWithDataSet> blockForWritableAccounts() {
672644d947574240b71c427d457f7a775dc160ec09Yorke Lee        return Arrays.asList(mAccounts);
682644d947574240b71c427d457f7a775dc160ec09Yorke Lee    }
692644d947574240b71c427d457f7a775dc160ec09Yorke Lee
702644d947574240b71c427d457f7a775dc160ec09Yorke Lee    @Override
7175895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott    public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
7275895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott        throw new UnsupportedOperationException("not implemented");
7367a0639c912ce5bed209d791f0bf8d09853bdbbdMarcus Hagerott    }
7467a0639c912ce5bed209d791f0bf8d09853bdbbdMarcus Hagerott
7567a0639c912ce5bed209d791f0bf8d09853bdbbdMarcus Hagerott    @Override
7675895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott    public ListenableFuture<List<AccountInfo>> filterAccountsAsync(Predicate<AccountInfo> filter) {
7775895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott        throw new UnsupportedOperationException("not implemented");
7804be88c2bec8d0a0cc9e1f4f0af3b3a2ff8ac4e7Marcus Hagerott    }
7904be88c2bec8d0a0cc9e1f4f0af3b3a2ff8ac4e7Marcus Hagerott
8004be88c2bec8d0a0cc9e1f4f0af3b3a2ff8ac4e7Marcus Hagerott    @Override
8175895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott    public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
8275895e73379aa26a3d4135c772af4ecb8a79b4c9Marcus Hagerott        throw new UnsupportedOperationException("not implemented");
83e7a71cbbe8929a9d8a7ca0a3b5668646d49a611aMarcus Hagerott    }
84e7a71cbbe8929a9d8a7ca0a3b5668646d49a611aMarcus Hagerott
85e7a71cbbe8929a9d8a7ca0a3b5668646d49a611aMarcus Hagerott    @Override
8656c8a0cce9ea98e0f088e74474a57968a02810abWenyi Wang    public Account getDefaultGoogleAccount() {
8756c8a0cce9ea98e0f088e74474a57968a02810abWenyi Wang        return null;
8856c8a0cce9ea98e0f088e74474a57968a02810abWenyi Wang    }
892644d947574240b71c427d457f7a775dc160ec09Yorke Lee}
90