1d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn/*
2d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * Copyright (C) 2014 The Android Open Source Project
3d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn *
4d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * Licensed under the Apache License, Version 2.0 (the "License");
5d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * you may not use this file except in compliance with the License.
6d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * You may obtain a copy of the License at
7d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn *
8d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn *      http://www.apache.org/licenses/LICENSE-2.0
9d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn *
10d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * Unless required by applicable law or agreed to in writing, software
11d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * distributed under the License is distributed on an "AS IS" BASIS,
12d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * See the License for the specific language governing permissions and
14d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn * limitations under the License
15d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn */
16d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
177cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnpackage com.android.server.telecom;
18d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
19d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnimport android.content.BroadcastReceiver;
20d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnimport android.content.Context;
21d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnimport android.content.Intent;
22d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnimport android.net.Uri;
23d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
24d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnimport java.lang.String;
25d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
26d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn/**
278e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * Captures {@code android.intent.action.ACTION_PACKAGE_FULLY_REMOVED} intents and triggers the
287cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunn * removal of associated {@link android.telecom.PhoneAccount}s via the
297cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunn * {@link com.android.telecom.PhoneAccountRegistrar}.
308e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * Note: This class listens for the {@code PACKAGE_FULLY_REMOVED} intent rather than
318e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * {@code PACKAGE_REMOVED} as {@code PACKAGE_REMOVED} is triggered on re-installation of the same
328e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * package, where {@code PACKAGE_FULLY_REMOVED} is triggered only when an application is completely
338e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * uninstalled.  This is desirable as we do not wish to un-register all
347cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunn * {@link android.telecom.PhoneAccount}s associated with a package being re-installed to ensure
358e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn * the enabled state of the accounts is retained.
36d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn */
37d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunnpublic class PhoneAccountBroadcastReceiver extends BroadcastReceiver {
38d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    /**
39d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     * Receives the intents the class is configured to received.
40d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     *
41d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     * @param context The Context in which the receiver is running.
42d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     * @param intent The Intent being received.
43d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     */
44d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    @Override
45d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    public void onReceive(Context context, Intent intent) {
468e0fef4e1fd09116e4df4ba2ecc18f06cebe71c2Tyler Gunn        if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(intent.getAction())) {
47d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn            Uri uri = intent.getData();
48d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn            if (uri == null) {
49d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn                return;
50d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn            }
51d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
52d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn            String packageName = uri.getSchemeSpecificPart();
53d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn            handlePackageRemoved(context, packageName);
54d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn        }
55d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    }
56d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn
57d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    /**
58d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     * Handles the removal of a package by calling upon the {@link PhoneAccountRegistrar} to
597cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunn     * un-register any {@link android.telecom.PhoneAccount}s associated with the package.
60d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     *
61d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     * @param packageName The name of the removed package.
62d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn     */
63d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    private void handlePackageRemoved(Context context, String packageName) {
6465ff88c1251189543284abe02a90ef04203c1ae5Jay Shrauner        final CallsManager callsManager = CallsManager.getInstance();
6565ff88c1251189543284abe02a90ef04203c1ae5Jay Shrauner        if (callsManager != null) {
6665ff88c1251189543284abe02a90ef04203c1ae5Jay Shrauner            callsManager.getPhoneAccountRegistrar().clearAccounts(packageName);
6765ff88c1251189543284abe02a90ef04203c1ae5Jay Shrauner        }
68d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn    }
69d900ce6021fe457c97f1e8d82374bf30b08f2ee5Tyler Gunn}
70