/**
* This file is part of FileSpace for Android, an app for managing your server (files, talks...).
* <p/>
* Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
* <p/>
* LICENSE:
* <p/>
* FileSpace for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General
* Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
* later version.
* <p/>
* FileSpace for Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* @author Jonathan Mercandalli
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
*/
package com.mercandalli.android.apps.files.file;
import android.app.Activity;
import android.app.Dialog;
import android.os.Environment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import com.mercandalli.android.apps.files.R;
import com.mercandalli.android.apps.files.common.animation.ScaleAnimationAdapter;
import com.mercandalli.android.apps.files.common.listener.ResultCallback;
import com.mercandalli.android.apps.files.common.view.divider.SpacesItemDecoration;
import com.mercandalli.android.apps.files.settings.SettingsManager;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FileChooserDialog extends Dialog implements FileModelAdapter.OnFileClickListener {
protected FileManager mFileManager;
private RecyclerView mRecyclerView;
private final List<FileModel> mFileModelList;
private File mCurrentFile;
private FileChooserDialogSelection mFileModelListener;
private final String mRootPath;
public FileChooserDialog(final Activity activity, FileChooserDialogSelection listener) {
super(activity);
mFileManager = FileManager.getInstance(activity);
mFileModelListener = listener;
mFileModelList = new ArrayList<>();
setContentView(R.layout.dialog_filechooser);
setTitle(R.string.app_name);
setCancelable(true);
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
mRecyclerView = (RecyclerView) findViewById(R.id.files);
mRecyclerView.setHasFixedSize(true);
if (activity.getResources().getBoolean(R.bool.is_landscape)) {
mRecyclerView.setLayoutManager(new GridLayoutManager(activity, 2));
} else {
mRecyclerView.setLayoutManager(new LinearLayoutManager(activity));
}
mRecyclerView.addItemDecoration(new SpacesItemDecoration(12, 2));
mRootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
mCurrentFile = new File(mRootPath);
findViewById(R.id.up).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mRootPath.equals(mCurrentFile.getAbsolutePath())) {
File parent = mCurrentFile.getParentFile();
if (parent != null) {
mCurrentFile = parent;
}
refreshList();
}
}
});
refreshList();
FileChooserDialog.this.show();
}
@Override
public void onFileClick(View view, int position) {
if (position < mFileModelList.size()) {
FileModel file = mFileModelList.get(position);
if (file.isDirectory()) {
if (file.getCount() == 0) {
Toast.makeText(getContext(), "No files", Toast.LENGTH_SHORT).show();
} else {
mCurrentFile = file.getFile();
refreshList();
}
} else {
mFileModelListener.onFileChooserDialogSelected(file, view);
dismiss();
}
}
}
private void refreshList() {
mFileManager.getFiles(
new FileModel.FileModelBuilder().file(mCurrentFile).build(),
SettingsManager.getInstance(getContext()).isSuperUser(),
new ResultCallback<List<FileModel>>() {
@Override
public void success(List<FileModel> result) {
mFileModelList.clear();
mFileModelList.addAll(result);
updateAdapter();
}
@Override
public void failure() {
}
});
}
private void updateAdapter() {
final FileModelAdapter adapter = new FileModelAdapter(getContext(), mFileModelList, null, this, null);
ScaleAnimationAdapter scaleAnimationAdapter = new ScaleAnimationAdapter(mRecyclerView, adapter);
scaleAnimationAdapter.setDuration(220);
scaleAnimationAdapter.setOffsetDuration(32);
mRecyclerView.setAdapter(scaleAnimationAdapter);
}
public interface FileChooserDialogSelection {
void onFileChooserDialogSelected(final FileModel fileModel, final View view);
}
}