SynchronousContactsProvider2.java revision 3d8b043c3341a5b6c2e781b7eba9767d5cd13267
1619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey/*
2619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * Copyright (C) 2009 The Android Open Source Project
3619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey *
4619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * you may not use this file except in compliance with the License.
6619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * You may obtain a copy of the License at
7619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey *
8619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey *
10619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * Unless required by applicable law or agreed to in writing, software
11619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * See the License for the specific language governing permissions and
14619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * limitations under the License.
15619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey */
16619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey
1728f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts;
18619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey
19d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.Context;
20d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
21619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey/**
22619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * A version of {@link ContactsProvider2} class that performs aggregation
23619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey * synchronously and wipes all data at construction time.
24619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey */
25619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkeypublic class SynchronousContactsProvider2 extends ContactsProvider2 {
26619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    private static Boolean sDataWiped = false;
27d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    private static OpenHelper mOpenHelper;
28619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey
29619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    public SynchronousContactsProvider2() {
3053056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        super(new SynchronousAggregationScheduler());
31619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    }
32619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey
33619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    @Override
34d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected OpenHelper getOpenHelper(final Context context) {
35d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (mOpenHelper == null) {
36d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            mOpenHelper = new OpenHelper(context);
37d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mOpenHelper;
39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
413d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov    public static void resetOpenHelper() {
423d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov        mOpenHelper = null;
433d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov    }
443d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov
45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    @Override
46619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    public boolean onCreate() {
47619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey        boolean created = super.onCreate();
48619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey        synchronized (sDataWiped) {
49619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey            if (!sDataWiped) {
50619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey                sDataWiped = true;
51619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey                wipeData();
52619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey            }
53619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey        }
54619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey        return created;
55619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey    }
5653056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
573d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov    @Override
583d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov    protected boolean isLegacyContactImportNeeded() {
593d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov
603d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov        // We have an explicit test for data conversion - no need to do it every time
613d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov        return false;
623d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov    }
633d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov
6453056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov    private static class SynchronousAggregationScheduler extends ContactAggregationScheduler {
6553056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
6653056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        @Override
6753056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        public void start() {
6853056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        }
6953056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
7053056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        @Override
7153056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        public void stop() {
7253056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        }
7353056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
7453056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        @Override
7553056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        long currentTime() {
7653056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov            return 0;
7753056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        }
7853056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
7953056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        @Override
8053056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        void runDelayed() {
8153056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov            super.run();
8253056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov        }
8353056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov
8453056d49d8adf5d1fe2d18cb60c3c26f281e7a6cDmitri Plotnikov    }
85619871b0fb0175d75ff9336bfe5aec0b27b9bdadJeff Sharkey}
86