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