content: package edu.berkeley.cs.amplab.carat.android.sampling;
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.SharedPreferences;
  import android.content.SharedPreferences.Editor;
  import android.preference.PreferenceManager;
  import android.util.Log;
  
  public class InstallReceiver extends BroadcastReceiver {
  
      private static final String TAG = "InstallReceiver";
  
      /**
       * Used to record package installs and uninstalls. Their details will be
       * sent in the next Sample.
       * 
       * @param context
       *            the context
       * @param Intent
       *            the intent (ACTION_PACKAGE_ADDED, _REPLACED, or _REMOVED)
       */
      @Override
      public void onReceive(Context context, Intent intent) {
          String a = intent.getAction();
          SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
          String data = intent.getDataString();
          if (a == null && data == null)
              return;
          String pkg = data.substring(8);
          Editor e = p.edit().remove(SamplingLibrary.SIG_SENT_256 + pkg).remove(SamplingLibrary.SIG_SENT + pkg);
  
          // Schedule sending of sig of installed and replaced pkgs.
          if (a.equals(Intent.ACTION_PACKAGE_ADDED)) {
              boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
              if (!replacing) {
                  Log.i(TAG, "INSTALLED: " + pkg);
                  e.putBoolean(SamplingLibrary.INSTALLED + pkg, true).commit();
              }
          } else if (a.equals(Intent.ACTION_PACKAGE_REMOVED)) {
              boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
              /*
               * send the uninstallation flag in the next sample.
               */
              if (!replacing) {
                  Log.i(TAG, "UNINSTALLED: " + pkg);
                  e.putBoolean(SamplingLibrary.UNINSTALLED + pkg, true).commit();
              }
          } else if (a.equals(Intent.ACTION_PACKAGE_REPLACED)) {
              Log.i(TAG, "REPLACED: " + pkg);
              e.putBoolean(SamplingLibrary.REPLACED + pkg, true).commit();
          }
      }
  }
  