1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts;
18
19import android.app.Fragment;
20import android.app.FragmentManager;
21import android.app.FragmentTransaction;
22import android.content.ContentResolver;
23import android.content.Intent;
24import android.content.SharedPreferences;
25import android.os.Bundle;
26import android.view.View;
27
28import com.android.contacts.activities.TransactionSafeActivity;
29import com.android.contacts.testing.InjectedServices;
30
31/**
32 * A common superclass for Contacts activities that handles application-wide services.
33 */
34public abstract class ContactsActivity extends TransactionSafeActivity
35    implements ContactSaveService.Listener
36{
37
38    private ContentResolver mContentResolver;
39
40    @Override
41    public ContentResolver getContentResolver() {
42        if (mContentResolver == null) {
43            InjectedServices services = ContactsApplication.getInjectedServices();
44            if (services != null) {
45                mContentResolver = services.getContentResolver();
46            }
47            if (mContentResolver == null) {
48                mContentResolver = super.getContentResolver();
49            }
50        }
51        return mContentResolver;
52    }
53
54    @Override
55    public SharedPreferences getSharedPreferences(String name, int mode) {
56        InjectedServices services = ContactsApplication.getInjectedServices();
57        if (services != null) {
58            SharedPreferences prefs = services.getSharedPreferences();
59            if (prefs != null) {
60                return prefs;
61            }
62        }
63
64        return super.getSharedPreferences(name, mode);
65    }
66
67    @Override
68    public Object getSystemService(String name) {
69        Object service = super.getSystemService(name);
70        if (service != null) {
71            return service;
72        }
73
74        return getApplicationContext().getSystemService(name);
75    }
76
77    @Override
78    protected void onCreate(Bundle savedInstanceState) {
79        ContactSaveService.registerListener(this);
80        super.onCreate(savedInstanceState);
81    }
82
83    @Override
84    protected void onDestroy() {
85        ContactSaveService.unregisterListener(this);
86        super.onDestroy();
87    }
88
89    @Override
90    public void onServiceCompleted(Intent callbackIntent) {
91        onNewIntent(callbackIntent);
92    }
93
94    /**
95     * Convenient version of {@link FragmentManager#findFragmentById(int)}, which throws
96     * an exception if the fragment doesn't exist.
97     */
98    @SuppressWarnings("unchecked")
99    public <T extends Fragment> T getFragment(int id) {
100        T result = (T)getFragmentManager().findFragmentById(id);
101        if (result == null) {
102            throw new IllegalArgumentException("fragment 0x" + Integer.toHexString(id)
103                    + " doesn't exist");
104        }
105        return result;
106    }
107
108    /**
109     * Convenient version of {@link #findViewById(int)}, which throws
110     * an exception if the view doesn't exist.
111     */
112    @SuppressWarnings("unchecked")
113    public <T extends View> T getView(int id) {
114        T result = (T)findViewById(id);
115        if (result == null) {
116            throw new IllegalArgumentException("view 0x" + Integer.toHexString(id)
117                    + " doesn't exist");
118        }
119        return result;
120    }
121
122    protected static void showFragment(FragmentTransaction ft, Fragment f) {
123        if ((f != null) && f.isHidden()) ft.show(f);
124    }
125
126    protected static void hideFragment(FragmentTransaction ft, Fragment f) {
127        if ((f != null) && !f.isHidden()) ft.hide(f);
128    }
129}
130