1c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/*
2c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project
3c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee *
4c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License");
5c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * you may not use this file except in compliance with the License.
6c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * You may obtain a copy of the License at
7c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee *
8c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee *      http://www.apache.org/licenses/LICENSE-2.0
9c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee *
10c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software
11c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS,
12c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * See the License for the specific language governing permissions and
14c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * limitations under the License
15c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */
16c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
17c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepackage com.android.providers.contacts;
18c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
19c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.app.IntentService;
20c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.ContentResolver;
21c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.content.Intent;
22c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.provider.VoicemailContract.Status;
23c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.provider.VoicemailContract.Voicemails;
24c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeeimport android.util.Log;
25c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
2638210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.google.common.annotations.VisibleForTesting;
2738210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki
28c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee/**
29c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee * A service that cleans up voicemail related data for packages that are uninstalled.
30c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee */
31c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepublic class VoicemailCleanupService extends IntentService {
32c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    private static final String TAG = "VoicemailCleanupService";
33c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
34c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    public VoicemailCleanupService() {
35c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        super("VoicemailCleanupService");
36c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    }
37c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
38c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    @Override
39c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    protected void onHandleIntent(Intent intent) {
40c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        handleIntentInternal(intent, getContentResolver());
41c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    }
42c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee
43c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    @VisibleForTesting
44c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    void handleIntentInternal(Intent intent,
45c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            ContentResolver contentResolver) {
46c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) &&
47c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee                !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
48c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            String packageUninstalled = intent.getData().getSchemeSpecificPart();
49c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            Log.d(TAG, "Cleaning up data for package: " + packageUninstalled);
50c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            // Delete both voicemail content and voicemail status entries for this package.
51c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            contentResolver.delete(Voicemails.buildSourceUri(packageUninstalled), null, null);
52c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            contentResolver.delete(Status.buildSourceUri(packageUninstalled), null, null);
53c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        } else {
54c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee            Log.w(TAG, "Unexpected intent: " + intent);
55c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        }
56c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    }
57c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee}
58