private void createListView() {
    root = (FrameLayout) inflater.inflate(R.layout.qrh__listview_container, null);
    root.addView(content);

    listView.getViewTreeObserver().addOnGlobalLayoutListener(this);
    ListViewScrollObserver observer = new ListViewScrollObserver(listView);
    // listView.setOnScrollListener(this);
    observer.setOnScrollUpAndDownListener(
        new OnListViewScrollListener() {
          @Override
          public void onScrollUpDownChanged(int delta, int scrollPosition, boolean exact) {
            onNewScroll(delta);
            snap(headerTop == scrollPosition);
          }

          @Override
          public void onScrollIdle() {
            QuickReturnHeaderHelper.this.onScrollIdle();
          }
        });

    root.addView(realHeader, realHeaderLayoutParams);

    dummyHeader = new View(context);
    AbsListView.LayoutParams params =
        new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, headerHeight);
    dummyHeader.setLayoutParams(params);
    listView.addHeaderView(dummyHeader);
  }
  public void testRemoveOnComputeInternalInsetsListener() {
    final ListView lv1 = (ListView) mActivity.findViewById(R.id.listview1);
    mViewTreeObserver = lv1.getViewTreeObserver();

    MockOnComputeInternalInsetsListener listener = new MockOnComputeInternalInsetsListener();
    mViewTreeObserver.removeOnComputeInternalInsetsListener(listener);
  }
 private void fixLayout() {
   if (listView != null) {
     ViewTreeObserver obs = listView.getViewTreeObserver();
     obs.addOnPreDrawListener(
         new ViewTreeObserver.OnPreDrawListener() {
           @Override
           public boolean onPreDraw() {
             fixLayoutInternal();
             if (listView != null) {
               listView.getViewTreeObserver().removeOnPreDrawListener(this);
             }
             return true;
           }
         });
   }
 }
  void refresh(View v) {
    if (mTags == null && mAlbum == null) {
      Intent intent = getActivity().getIntent();
      mTags = intent != null ? intent.getStringExtra(EXTRA_TAG) : null;
      mAlbum = intent != null ? intent.getStringExtra(EXTRA_ALBUM) : null;
    }
    if (mTags != null || mAlbum != null) {
      mAdapter = new GalleryAdapterExt(mTags, mAlbum);
      removeTagsAndAlbumInformationFromActivityIntent();
    } else {
      mAdapter = new GalleryAdapterExt();
    }

    final ListView photosGrid = (ListView) v.findViewById(R.id.list_photos);
    photosGrid
        .getViewTreeObserver()
        .addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
              int lastHeight = 0;

              @Override
              public void onGlobalLayout() {
                if (mAdapter != null
                    && (mAdapter.imageFlowUtils.getTotalWidth() != photosGrid.getWidth()
                        || photosGrid.getHeight() != lastHeight)) {
                  CommonUtils.debug(TAG, "Reinit grid groups");
                  mAdapter.imageFlowUtils.buildGroups(
                      photosGrid.getWidth(),
                      mImageThumbSize,
                      photosGrid.getHeight() - 2 * (mImageThumbBorder + mImageThumbSpacing),
                      mImageThumbBorder + mImageThumbSpacing);
                  mAdapter.notifyDataSetChanged();
                  lastHeight = photosGrid.getHeight();
                }
              }
            });
    photosGrid.setAdapter(mAdapter);
  }
        private void animateRemoval(final ListView listview, View viewToRemove) {
          int firstVisiblePosition = listview.getFirstVisiblePosition();
          for (int i = 0; i < listview.getChildCount(); ++i) {
            View child = listview.getChildAt(i);
            if (child != viewToRemove) {
              int position = firstVisiblePosition + i;
              long itemId = listview.getAdapter().getItemId(position);
              mItemIdTopMap.put(itemId, child.getTop());
            }
          }
          // Delete the item from the adapter
          LocalAdapter.ChildViewHolder childViewHolder =
              (LocalAdapter.ChildViewHolder) viewToRemove.getTag();
          ((LocalAdapter) getExpandableListAdapter())
              .remove(childViewHolder.groupPosition, viewToRemove);
          new WriteToDatabaseTask(LocalLyricsFragment.this)
              .execute(LocalLyricsFragment.this, null, childViewHolder.lyrics);

          final ViewTreeObserver observer = listview.getViewTreeObserver();
          observer.addOnPreDrawListener(
              new ViewTreeObserver.OnPreDrawListener() {
                public boolean onPreDraw() {
                  observer.removeOnPreDrawListener(this);
                  boolean firstAnimation = true;
                  int firstVisiblePosition = listview.getFirstVisiblePosition();
                  for (int i = 0; i < listview.getChildCount(); ++i) {
                    final View child = listview.getChildAt(i);
                    int position = firstVisiblePosition + i;
                    long itemId = getListView().getAdapter().getItemId(position);
                    Integer formerTop = mItemIdTopMap.get(itemId);
                    int newTop = child.getTop();
                    if (formerTop != null) {
                      if (formerTop != newTop) {
                        int delta = formerTop - newTop;
                        child.setTranslationY(delta);
                        int MOVE_DURATION = 500;
                        child.animate().setDuration(MOVE_DURATION).translationY(0);
                        if (firstAnimation) {
                          child
                              .animate()
                              .setListener(
                                  new AnimatorActionListener(
                                      new Runnable() {
                                        public void run() {
                                          mBackgroundContainer.hideBackground();
                                          mSwiping = false;
                                          getListView().setEnabled(true);
                                        }
                                      },
                                      AnimatorActionListener.ActionType.END));
                          firstAnimation = false;
                        }
                      }
                    } else {
                      // Animate new views along with the others. The catch is that they did not
                      // exist in the start state, so we must calculate their starting position
                      // based on neighboring views.
                      int childHeight = child.getHeight() + listview.getDividerHeight();
                      formerTop = newTop + (i > 0 ? childHeight : -childHeight);
                      int delta = formerTop - newTop;
                      child.setTranslationY(delta);
                      int MOVE_DURATION = 500;
                      child.animate().setDuration(MOVE_DURATION).translationY(0);
                      if (firstAnimation) {
                        child
                            .animate()
                            .setListener(
                                new AnimatorActionListener(
                                    new Runnable() {
                                      public void run() {
                                        mBackgroundContainer.hideBackground();
                                        mSwiping = false;
                                        getListView().setEnabled(true);
                                      }
                                    },
                                    AnimatorActionListener.ActionType.END));
                        firstAnimation = false;
                      }
                    }
                  }
                  mBackgroundContainer.hideBackground();
                  mItemIdTopMap.clear();
                  return true;
                }
              });
        }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // Get settings provider
    mSettings = SettingsProvider.getInstance(this);

    // Check language
    Log.d(MainActivity.class.getName(), "Set locale in onCreate");
    setLocale();

    // Set flag indicating we are in oncreate
    mOnResumeDirectlyAfterOnCreate = true;

    // Now go on
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainactivity);

    // Check if observer have to be started
    if (mSettings.getBackgroundObserverEnabled()) {
      // Start foreground service
      Intent startIntent = new Intent(this, ForeGroundService.class);
      startIntent.setAction(ForeGroundService.FOREGROUNDSERVICE_START);
      startService(startIntent);
    }

    // Get base linear layout
    mMainLayout = (LinearLayout) findViewById(R.id.linearLayoutMain);

    // Check if background image have to be set
    WallpaperSelectDialog selectDialog = new WallpaperSelectDialog(this);
    selectDialog.setWallpaper(false);

    // Get linear layout for semi-transparent background
    mSemiTransparentLayout =
        (LinearLayout) findViewById(R.id.linearLayoutSemiTransparentBackground);

    // Get clock and date
    mTextViewClock = (TextView) findViewById(R.id.textViewClock);
    mTextViewDate = (TextView) findViewById(R.id.textViewDate);

    // Get ListView
    mListView = (ListView) findViewById(R.id.listView);

    // Handle item click listener
    mListView.setOnItemClickListener(
        new AdapterView.OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(
                MainActivity.class.getName(), "OnItemClickListener: clicked position " + position);
            handleLeftBarItemSelection(parent, view, position, id);
          }
        });

    // Handle item selected changes
    mListView.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d(
                MainActivity.class.getName(),
                "OnItemSelectedListener: selected position " + position);
            handleLeftBarItemSelection(parent, view, position, id);
          }

          @Override
          public void onNothingSelected(AdapterView<?> parent) {}
        });

    // Set adapter
    LeftBarItemsListAdapter actAdapter = new LeftBarItemsListAdapter(this);
    mListView.setAdapter(actAdapter);

    // Focus first item
    mListView
        .getViewTreeObserver()
        .addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
              @Override
              public void onGlobalLayout() {
                try {
                  // Remove listener
                  mListView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

                  // Check if first icon have to be selected
                  mListView.requestFocusFromTouch();
                  mListView.setSelection(0);
                } catch (Exception e) {
                  StringWriter errors = new StringWriter();
                  e.printStackTrace(new PrintWriter(errors));
                  String errorReason = errors.toString();
                  Log.d(
                      MainActivity.class.getName(),
                      "Failed to focus first left bar list item: \n" + errorReason);
                }
              }
            });

    // Check if left bar shall be hided
    mLeftBar = (LinearLayout) findViewById(R.id.leftbar);
  }