@Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (Intent.ACTION_PACKAGE_CHANGED.equals(action) || Intent.ACTION_PACKAGE_REMOVED.equals(action) || Intent.ACTION_PACKAGE_ADDED.equals(action)) { Log.i(TAG, "action: " + action); final String packageName = intent.getData().getSchemeSpecificPart(); final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); int op = PackageUpdatedTask.OP_NONE; if (packageName == null || packageName.length() == 0) { // they sent us a bad intent return; } if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { op = PackageUpdatedTask.OP_UPDATE; } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { if (!replacing) { op = PackageUpdatedTask.OP_REMOVE; } } else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { if (!replacing) { op = PackageUpdatedTask.OP_ADD; } else { op = PackageUpdatedTask.OP_UPDATE; } } mHandler.post(new PackageUpdatedTask(op, new String[] {packageName})); } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { Log.i(TAG, "ACTION_EXTERNAL_APPLICATIONS_AVAILABLE"); String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); int op = PackageUpdatedTask.OP_ADD; mHandler.post(new PackageUpdatedTask(op, packages)); } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { Log.i(TAG, "ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE"); String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); int op = PackageUpdatedTask.OP_REMOVE; mHandler.post(new PackageUpdatedTask(op, packages)); } else if (Intent.ACTION_TIME_TICK.equals(action) || Intent.ACTION_TIME_CHANGED.equals(action) || Intent.ACTION_TIMEZONE_CHANGED.equals(action)) { timeChanged(); } else if (FavoritesModel.ACTION_FAVOTITE_UPDATE.equals(action)) { Log.i(TAG, "ACTION_FAVOTITE_UPDATE"); FavoritesData.saveFavoritesToDatabase(mContext); FavoritesData.sort(); } }
@Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); mBatteryStatus = intent.getIntExtra( BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action) || Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { setupNavigationItems(); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // Give up on screen off. what's the point in pie controls if you don't see them? if (isShowing()) { mPieContainer.exit(); } } }
@Override public void onReceive(Context context, Intent intent) { mChangeUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); if (mChangeUserId == UserHandle.USER_NULL) { throw new IllegalArgumentException( "Intent broadcast does not contain user handle: " + intent); } onBeginPackageChanges(); mDisappearingPackages = mAppearingPackages = null; mSomePackagesChanged = false; String action = intent.getAction(); if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { String pkg = getPackageName(intent); int uid = intent.getIntExtra(Intent.EXTRA_UID, 0); // We consider something to have changed regardless of whether // this is just an update, because the update is now finished // and the contents of the package may have changed. mSomePackagesChanged = true; if (pkg != null) { mAppearingPackages = mTempArray; mTempArray[0] = pkg; if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { mModifiedPackages = mTempArray; mChangeType = PACKAGE_UPDATING; onPackageUpdateFinished(pkg, uid); onPackageModified(pkg); } else { mChangeType = PACKAGE_PERMANENT_CHANGE; onPackageAdded(pkg, uid); } onPackageAppeared(pkg, mChangeType); if (mChangeType == PACKAGE_UPDATING) { synchronized (mUpdatingPackages) { mUpdatingPackages.remove(pkg); } } } } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { String pkg = getPackageName(intent); int uid = intent.getIntExtra(Intent.EXTRA_UID, 0); if (pkg != null) { mDisappearingPackages = mTempArray; mTempArray[0] = pkg; if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { mChangeType = PACKAGE_UPDATING; synchronized (mUpdatingPackages) { // not used for now // mUpdatingPackages.add(pkg); } onPackageUpdateStarted(pkg, uid); } else { mChangeType = PACKAGE_PERMANENT_CHANGE; // We only consider something to have changed if this is // not a replace; for a replace, we just need to consider // it when it is re-added. mSomePackagesChanged = true; onPackageRemoved(pkg, uid); if (intent.getBooleanExtra(Intent.EXTRA_REMOVED_FOR_ALL_USERS, false)) { onPackageRemovedAllUsers(pkg, uid); } } onPackageDisappeared(pkg, mChangeType); } } else if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { String pkg = getPackageName(intent); int uid = intent.getIntExtra(Intent.EXTRA_UID, 0); String[] components = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST); if (pkg != null) { mModifiedPackages = mTempArray; mTempArray[0] = pkg; mChangeType = PACKAGE_PERMANENT_CHANGE; if (onPackageChanged(pkg, uid, components)) { mSomePackagesChanged = true; } onPackageModified(pkg); } } else if (Intent.ACTION_QUERY_PACKAGE_RESTART.equals(action)) { mDisappearingPackages = intent.getStringArrayExtra(Intent.EXTRA_PACKAGES); mChangeType = PACKAGE_TEMPORARY_CHANGE; boolean canRestart = onHandleForceStop( intent, mDisappearingPackages, intent.getIntExtra(Intent.EXTRA_UID, 0), false); if (canRestart) setResultCode(Activity.RESULT_OK); } else if (Intent.ACTION_PACKAGE_RESTARTED.equals(action)) { mDisappearingPackages = new String[] {getPackageName(intent)}; mChangeType = PACKAGE_TEMPORARY_CHANGE; onHandleForceStop( intent, mDisappearingPackages, intent.getIntExtra(Intent.EXTRA_UID, 0), true); } else if (Intent.ACTION_UID_REMOVED.equals(action)) { onUidRemoved(intent.getIntExtra(Intent.EXTRA_UID, 0)); } else if (Intent.ACTION_USER_STOPPED.equals(action)) { if (intent.hasExtra(Intent.EXTRA_USER_HANDLE)) { onHandleUserStop(intent, intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0)); } } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); mAppearingPackages = pkgList; mChangeType = PACKAGE_TEMPORARY_CHANGE; mSomePackagesChanged = true; if (pkgList != null) { onPackagesAvailable(pkgList); for (int i = 0; i < pkgList.length; i++) { onPackageAppeared(pkgList[i], PACKAGE_TEMPORARY_CHANGE); } } } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); mDisappearingPackages = pkgList; mChangeType = PACKAGE_TEMPORARY_CHANGE; mSomePackagesChanged = true; if (pkgList != null) { onPackagesUnavailable(pkgList); for (int i = 0; i < pkgList.length; i++) { onPackageDisappeared(pkgList[i], PACKAGE_TEMPORARY_CHANGE); } } } if (mSomePackagesChanged) { onSomePackagesChanged(); } onFinishPackageChanges(); mChangeUserId = UserHandle.USER_NULL; }
public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); final UserHandleCompat user = UserHandleCompat.myUserHandle(); if (Intent.ACTION_PACKAGE_CHANGED.equals(action) || Intent.ACTION_PACKAGE_REMOVED.equals(action) || Intent.ACTION_PACKAGE_ADDED.equals(action)) { final String packageName = intent.getData().getSchemeSpecificPart(); final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); if (packageName == null || packageName.length() == 0) { // they sent us a bad intent return; } if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackageChanged(packageName, user); } } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { if (!replacing) { for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackageRemoved(packageName, user); } } // else, we are replacing the package, so a PACKAGE_ADDED will be sent // later, we will update the package at this time } else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { if (!replacing) { for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackageAdded(packageName, user); } } else { for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackageChanged(packageName, user); } } } } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { // EXTRA_REPLACING is available Kitkat onwards. For lower devices, it is broadcasted // when moving a package or mounting/un-mounting external storage. Assume that // it is a replacing operation. final boolean replacing = intent.getBooleanExtra( Intent.EXTRA_REPLACING, Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT); String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackagesAvailable(packages, user, replacing); } } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { // This intent is broadcasted when moving a package or mounting/un-mounting // external storage. // However on Kitkat this is also sent when a package is being updated, and // contains an extra Intent.EXTRA_REPLACING=true for that case. // Using false as default for Intent.EXTRA_REPLACING gives correct value on // lower devices as the intent is not sent when the app is updating/replacing. final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); String[] packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); for (OnAppsChangedCallbackCompat callback : getCallbacks()) { callback.onPackagesUnavailable(packages, user, replacing); } } }