131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.BroadcastReceiver;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Context;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Intent;
2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.ContentResolver;
2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.database.Cursor;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.net.Uri;
25d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guyimport android.widget.Toast;
2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport java.net.URISyntaxException;
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
29edcce099c98a6c40d10109ac092ab50f9d2668f3Romain Guyimport com.android.launcher.R;
30edcce099c98a6c40d10109ac092ab50f9d2668f3Romain Guy
3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectpublic class UninstallShortcutReceiver extends BroadcastReceiver {
3251ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy    private static final String ACTION_UNINSTALL_SHORTCUT =
3351ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy            "com.android.launcher.action.UNINSTALL_SHORTCUT";
3451ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void onReceive(Context context, Intent data) {
3651ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy        if (!ACTION_UNINSTALL_SHORTCUT.equals(data.getAction())) {
3751ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy            return;
3851ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy        }
3951ed5b9bc05c6eb37dcb3fe38fa021f1044c0f88Romain Guy
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        String name = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        boolean duplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (intent != null && name != null) {
4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            final ContentResolver cr = context.getContentResolver();
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            Cursor c = cr.query(LauncherSettings.Favorites.CONTENT_URI,
4773b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                new String[] { LauncherSettings.Favorites._ID, LauncherSettings.Favorites.INTENT },
4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                LauncherSettings.Favorites.TITLE + "=?", new String[] { name }, null);
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            final int intentIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.INTENT);
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID);
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            boolean changed = false;
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            try {
5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                while (c.moveToNext()) {
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                    try {
581ce1a24cba4dc41bccfeab6fccb2f3355423841aRomain Guy                        if (intent.filterEquals(Intent.parseUri(c.getString(intentIndex), 0))) {
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            final long id = c.getLong(idIndex);
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            final Uri uri = LauncherSettings.Favorites.getContentUri(id, false);
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            cr.delete(uri, null, null);
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            changed = true;
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            if (!duplicate) {
6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                                break;
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                            }
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                        }
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                    } catch (URISyntaxException e) {
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                        // Ignore
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                    }
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                }
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            } finally {
7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                c.close();
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            }
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
75d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guy            if (changed) {
76d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guy                cr.notifyChange(LauncherSettings.Favorites.CONTENT_URI, null);
77d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guy                Toast.makeText(context, context.getString(R.string.shortcut_uninstalled, name),
78d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guy                        Toast.LENGTH_SHORT).show();
79d93a7d1716b06cd65f45dfc16232277d0d57c04dRomain Guy            }
8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
83