/**
   * The action will take after another activity reply to this one
   *
   * @param requestCode -- the key to get result
   * @param resultCode -- result state
   * @param data -- intent to get data
   */
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i(thisClass, "in FileChooser result");
    if (resultCode == RESULT_OK) {
      switch (requestCode) {
        case PICK_FILE_REQUEST_CODE:
          Uri fileUri = data.getData();

          //                    if (BuildConfig.DEBUG) {
          //                FileUtility.deleteAllFiles(currentSelectedDir());
          //                    }

          // create a file save the content under the related folder
          String path = UriUtility.getPath(this, fileUri);
          String name = FileUtility.getNameFromPath(path);
          FileEncryption file;
          File saveFile;
          try {
            saveFile = fileChooserBL.getEncryptedFilePath(currentSelectedDir(), name);
            file = new FileEncryption(saveFile, path, fileUri.toString(), password);
          } catch (IOException | NoSuchAlgorithmException e) {
            Log.e(thisClass, "File write failed: " + e.toString());
            return;
          }
          try {
            boolean succ = file.encrypt();
            if (!succ) {
              Toast.makeText(
                      getApplicationContext(), getString(R.string.encryptFail), Toast.LENGTH_SHORT)
                  .show();
              return;
            } else {
              Toast.makeText(
                      getApplicationContext(), getString(R.string.encryptSucc), Toast.LENGTH_SHORT)
                  .show();
            }
            if (!file.deleteOriginal()) {
              throw new EncryptionException("fail to delete original file");
            }
          } catch (IOException e) {
            Log.e(thisClass, "File encrypt failed: " + e.toString());
          } catch (NoSuchAlgorithmException | UnrecoverableEntryException | InvalidKeyException e) {
            Log.e(thisClass, " failed: " + e.toString());
          }
          // update the view as if it is clicked
          folderFragmentClick(fatherIndex);
          break;
      }
    } else {
      Log.e(thisClass, " fail to start activity " + data);
    }
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_with_fragment);

    Intent intent = getIntent();
    if (password == null) {
      password = intent.getStringExtra(FirstActivity.PASSWORD);
    }
    if (password == null) {
      showPasswordDialog();
    }

    // set the secretKey for this fragment to encrypt/decrypt
    fileChooserBL = new FileChooserBL(this);
    fileChooserBL.createAndInitDir(Category.values(), fatherDirInfos);
    // Check that the activity is using the layout version with
    // the fragment_container FrameLayout
    if (findViewById(R.id.folder_fragment_container) != null
        && findViewById(R.id.file_fragment_container) != null) {

      // However, if we're being restored from a previous state,
      // then we don't need to do anything and should return or else
      // we could end up with overlapping fragments.
      if (savedInstanceState != null) {
        return;
      }

      folderFragment =
          FolderFragment.newInstance(
              fatherDirInfos,
              R.layout.with_icon,
              new String[] {UIFileInfo.LOGO, UIFileInfo.NAME},
              new int[] {R.id.logo, R.id.desc1});
      detailFragment =
          DetailFileFragment.newInstance(
              UIFileInfo.addFileFrom(currentSelectedDir()), currentSelectedDir().getName());
      // In case this activity was started with special instructions from an
      // Intent, pass the Intent's extras to the fragment as arguments
      folderFragment.setArguments(getIntent().getExtras());
      detailFragment.setArguments(getIntent().getExtras());

      // Add the fragment to the '#fragment_container' FrameLayout
      FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
      fragmentTransaction.add(R.id.folder_fragment_container, folderFragment);
      fragmentTransaction.add(R.id.file_fragment_container, detailFragment).commit();
    }
  }
 @Override
 protected void onDestroy() {
   // TODO: 12/13/15 delete file here?
   fileChooserBL.deleteFile();
   super.onDestroy();
 }