private void cleanUp() {
   if (!this.mCleanedUp) {
     this.mHandler.removeCallbacks(this.mRemover);
     this.mHandler.removeCallbacks(this.mDisplayMini);
     UpdateDisplayState.releaseDisplayState(this.mDisplayStateId);
     this.mParent.getFragmentManager().beginTransaction().remove(this).commit();
   }
   this.mCleanedUp = true;
 }
 private void remove() {
   if ((this.mParent != null) && (!this.mCleanedUp)) {
     this.mHandler.removeCallbacks(this.mRemover);
     this.mHandler.removeCallbacks(this.mDisplayMini);
     this.mParent
         .getFragmentManager()
         .beginTransaction()
         .setCustomAnimations(0, R.anim.com_mixpanel_android_slide_down)
         .remove(this)
         .commit();
     UpdateDisplayState.releaseDisplayState(this.mDisplayStateId);
     this.mCleanedUp = true;
   }
 }
  public void testSurveyStateSaving() {
    final String surveyJsonString =
        "{\"collections\":[{\"id\":151,\"selector\":\"\\\"@mixpanel\\\" in properties[\\\"$email\\\"]\"}],"
            + "\"id\":299,"
            + "\"questions\":["
            + "{\"prompt\":\"PROMPT1\",\"extra_data\":{\"$choices\":[\"Answer1,1\",\"Answer1,2\",\"Answer1,3\"]},\"type\":\"multiple_choice\",\"id\":287},"
            + "{\"prompt\":\"PROMPT2\",\"extra_data\":{},\"type\":\"text\",\"id\":289}]}";

    Bitmap.Config conf = Bitmap.Config.ARGB_8888;
    Bitmap testBitmap = Bitmap.createBitmap(100, 100, conf);

    UpdateDisplayState originalUpdateDisplayState;
    try {
      final JSONObject surveyJson = new JSONObject(surveyJsonString);
      final Survey s = new Survey(surveyJson);
      final UpdateDisplayState.DisplayState.SurveyState surveyState =
          new UpdateDisplayState.DisplayState.SurveyState(s);
      surveyState.setHighlightColor(Color.WHITE);
      surveyState.setBackground(testBitmap);
      originalUpdateDisplayState = new UpdateDisplayState(surveyState, "DistinctId", "Token");
    } catch (JSONException e) {
      throw new RuntimeException("Survey string in test doesn't parse");
    } catch (BadDecideObjectException e) {
      throw new RuntimeException("Test survey string couldn't be made into a survey");
    }

    final Bundle inBundle = new Bundle();
    inBundle.putParcelable("TEST SURVEY PARCEL", originalUpdateDisplayState);
    final Parcel outerParcel = Parcel.obtain();
    inBundle.writeToParcel(outerParcel, 0);
    outerParcel.setDataPosition(0);
    final Bundle outBundle = outerParcel.readBundle();
    outBundle.setClassLoader(UpdateDisplayState.class.getClassLoader());
    final UpdateDisplayState inUpdateDisplayState = outBundle.getParcelable("TEST SURVEY PARCEL");

    final UpdateDisplayState.DisplayState.SurveyState surveyState =
        (UpdateDisplayState.DisplayState.SurveyState) inUpdateDisplayState.getDisplayState();
    final Survey inSurvey = surveyState.getSurvey();
    final String inDistinctId = inUpdateDisplayState.getDistinctId();
    final String inToken = inUpdateDisplayState.getToken();

    assertEquals("DistinctId", inDistinctId);
    assertEquals("Token", inToken);
    assertEquals(inSurvey.getId(), 299);

    List<Survey.Question> inQuestions = inSurvey.getQuestions();
    assertEquals(2, inQuestions.size());

    final Survey.Question q1 = inQuestions.get(0);
    assertEquals(q1.getId(), 287);
    assertEquals(q1.getPrompt(), "PROMPT1");
    assertEquals(q1.getType(), Survey.QuestionType.MULTIPLE_CHOICE);

    final List<String> q1Choices = q1.getChoices();
    assertEquals(q1Choices.size(), 3);
    assertEquals(q1Choices.get(0), "Answer1,1");
    assertEquals(q1Choices.get(1), "Answer1,2");
    assertEquals(q1Choices.get(2), "Answer1,3");

    final Survey.Question q2 = inQuestions.get(1);
    assertEquals(q2.getId(), 289);
    assertEquals(q2.getPrompt(), "PROMPT2");
    assertEquals(q2.getType(), Survey.QuestionType.TEXT);

    assertNotNull(surveyState.getBackground());
    assertNotNull(surveyState.getAnswers());
  }