/** Set state mode based on explicit user action. */
 private void setUserMode(int mode) {
   mState.userMode = mode;
   /// M: Check the fragment get from FragmentManager whether is null.
   DirectoryFragment directory = DirectoryFragment.get(getFragmentManager());
   if (directory != null) {
     directory.onUserModeChanged();
   } else {
     Log.w(TAG, "setUserMode with null DirectoryFragment in activity:" + this.hashCode());
   }
 }
  private void onCurrentDirectoryChanged(int anim) {
    final FragmentManager fm = getFragmentManager();
    final RootInfo root = getCurrentRoot();
    final DocumentInfo cwd = getCurrentDirectory();

    mDirectoryContainer.setDrawDisappearingFirst(anim == ANIM_DOWN);

    if (cwd == null) {
      // No directory means recents
      if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
        RecentsCreateFragment.show(fm);
      } else {
        DirectoryFragment.showRecentsOpen(fm, anim);

        /// M: When state has stored, we need use store state to init fragment(this may happen when
        // activity
        /// re-create, in this case we need use the userMode store in saveInstance, and only when
        // activity
        /// first created we need follow the below design. {@
        if (!mState.restored) {
          // Start recents in grid when requesting visual things
          final boolean visualMimes =
              MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes);
          mState.userMode = visualMimes ? MODE_GRID : MODE_LIST;
          mState.derivedMode = mState.userMode;
        }
        /// @}
      }
    } else {
      if (mState.currentSearch != null) {
        // Ongoing search
        DirectoryFragment.showSearch(fm, root, mState.currentSearch, anim);
      } else {
        // Normal boring directory
        DirectoryFragment.showNormal(fm, root, cwd, anim);
      }
    }

    // Forget any replacement target
    if (mState.action == ACTION_CREATE) {
      final SaveFragment save = SaveFragment.get(fm);
      if (save != null) {
        save.setReplaceTarget(null);
      }
    }

    if (mState.action == ACTION_OPEN_TREE) {
      final PickFragment pick = PickFragment.get(fm);
      if (pick != null) {
        final CharSequence displayName = (mState.stack.size() <= 1) ? root.title : cwd.displayName;
        pick.setPickTarget(cwd, displayName);
      }
    }

    final RootsFragment roots = RootsFragment.get(fm);
    if (roots != null) {
      roots.onCurrentRootChanged();
    }

    updateActionBar();
    invalidateOptionsMenu();
    dumpStack();
  }
 private void setDisplayFileSize(boolean display) {
   LocalPreferences.setDisplayFileSize(this, display);
   mState.showSize = display;
   DirectoryFragment.get(getFragmentManager()).onDisplayStateChanged();
   invalidateOptionsMenu();
 }