1d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov/*
2d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project
3d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov *
4d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * you may not use this file except in compliance with the License.
6d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * You may obtain a copy of the License at
7d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov *
8d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov *
10d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * See the License for the specific language governing permissions and
14d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov * limitations under the License
15d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov */
16d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov
17d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovpackage com.android.providers.contacts;
18d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov
19d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.content.BroadcastReceiver;
20d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.content.ContentProvider;
21d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.content.Context;
22d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.content.IContentProvider;
23d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.content.Intent;
24d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.net.Uri;
25d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikovimport android.provider.ContactsContract;
26d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov
27d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov/**
2872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Package intent receiver that invokes {@link ContactsProvider2#onPackageChanged} to update
2972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * the contact directory list.
30d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov */
3172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikovpublic class PackageIntentReceiver extends BroadcastReceiver {
32d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov
33d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov    @Override
34d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov    public void onReceive(Context context, Intent intent) {
3572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov        Uri packageUri = intent.getData();
3672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov        String packageName = packageUri.getSchemeSpecificPart();
3772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov        IContentProvider iprovider =
3872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov            context.getContentResolver().acquireProvider(ContactsContract.AUTHORITY);
3972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov        ContentProvider provider = ContentProvider.coerceToLocalContentProvider(iprovider);
4072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov        if (provider instanceof ContactsProvider2) {
4172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov            ((ContactsProvider2)provider).onPackageChanged(packageName);
42d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov        }
43c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        handlePackageChangedForVoicemail(context, intent);
44c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    }
45c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
46c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    private void handlePackageChangedForVoicemail(Context context, Intent intent) {
47c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) &&
48c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee                !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
49c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            // Forward the intent to the cleanup service for handling the event.
50c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            Intent intentToForward = new Intent(context, VoicemailCleanupService.class);
51c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            intentToForward.setData(intent.getData());
52c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            intentToForward.setAction(intent.getAction());
53c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            intentToForward.putExtras(intent.getExtras());
54c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            context.startService(intentToForward);
55c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        }
56d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov    }
57d3d812af96f7d77e13dc60652626b39f25907147Dmitri Plotnikov}
58