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