package org.horaapps.leafpic;
/**
* Created by Jibo on 18/04/2016.
*/
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialogFragment;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.mikepenz.community_material_typeface_library.CommunityMaterial;
import com.mikepenz.iconics.view.IconicsImageView;
import org.horaapps.leafpic.activities.base.ThemedActivity;
import org.horaapps.leafpic.data.Album;
import org.horaapps.leafpic.data.base.FoldersFileFilter;
import org.horaapps.leafpic.util.AlertDialogsHelper;
import org.horaapps.leafpic.util.ThemeHelper;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
public class SelectAlbumBottomSheet extends BottomSheetDialogFragment {
private String title;
private ArrayList<File> folders;
private BottomSheetAlbumsAdapter adapter;
private ThemeHelper theme;
private boolean exploreMode = false;
private boolean canGoBack = false;
private IconicsImageView imgExploreMode;
private LinearLayout exploreModePanel;
private TextView currentFolderPath;
private SelectAlbumInterface selectAlbumInterface;
private boolean canGoBack() {
return canGoBack;
}
public interface SelectAlbumInterface {
void folderSelected(String path);
}
public void setSelectAlbumInterface(SelectAlbumInterface selectAlbumInterface) {
this.selectAlbumInterface = selectAlbumInterface;
}
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
String path = view.findViewById(R.id.name_folder).getTag().toString();
if (isExploreMode()) displayContentFolder(new File(path));
else selectAlbumInterface.folderSelected(path);
}
};
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), R.layout.select_folder_bottom_sheet, null);
theme = new ThemeHelper(getContext());
RecyclerView mRecyclerView = (RecyclerView) contentView.findViewById(R.id.folders);
mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 1));
adapter = new BottomSheetAlbumsAdapter();
mRecyclerView.setAdapter(adapter);
exploreModePanel = (LinearLayout) contentView.findViewById(R.id.explore_mode_panel);
currentFolderPath = (TextView) contentView.findViewById(R.id.bottom_sheet_sub_title);
imgExploreMode = (IconicsImageView) contentView.findViewById(R.id.toggle_hidden_icon);
imgExploreMode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleExplorerMode(!exploreMode);
}
});
toggleExplorerMode(false);
/**SET UP THEME**/
theme.setColorScrollBarDrawable(ContextCompat.getDrawable(dialog.getContext(), R.drawable.ic_scrollbar));
contentView.findViewById(R.id.ll_bottom_sheet_title).setBackgroundColor(theme.getPrimaryColor());
contentView.findViewById(R.id.ll_select_folder).setBackgroundColor(theme.getCardBackgroundColor());
((TextView) contentView.findViewById(R.id.bottom_sheet_title)).setText(title);
((IconicsImageView) contentView.findViewById(R.id.create_new_folder)).setColor(theme.getIconColor());
((TextView) contentView.findViewById(R.id.create_new_folder_text)).setTextColor(theme.getSubTextColor());
((IconicsImageView) contentView.findViewById(R.id.done)).setColor(theme.getIconColor());
contentView.findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectAlbumInterface.folderSelected(currentFolderPath.getText().toString());
}
});
contentView.findViewById(R.id.ll_create_new_folder).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText editText = new EditText(getContext());
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme.getDialogStyle());
AlertDialogsHelper.getInsertTextDialog(((ThemedActivity) getActivity()), builder,
editText, R.string.new_folder);
builder.setPositiveButton(R.string.ok_action, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
File folderPath = new File(currentFolderPath.getText().toString() + File.separator + editText.getText().toString());
if (folderPath.mkdir()) displayContentFolder(folderPath);
}
});
builder.show();
}
});
dialog.setContentView(contentView);
CoordinatorLayout.LayoutParams layoutParams =
(CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if (behavior != null && behavior instanceof BottomSheetBehavior) {
((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback);
}
adapter.notifyDataSetChanged();
}
private void displayContentFolder(File dir) {
canGoBack = false;
if(dir.canRead()) {
folders = new ArrayList<File>();
File parent = dir.getParentFile();
if (parent.canRead()) {
canGoBack = true;
folders.add(0, parent);
}
File[] files = dir.listFiles(new FoldersFileFilter());
if (files != null && files.length > 0) {
folders.addAll(new ArrayList<File>(Arrays.asList(files)));
currentFolderPath.setText(dir.getAbsolutePath());
}
currentFolderPath.setText(dir.getAbsolutePath());
adapter.notifyDataSetChanged();
}
}
private void setExploreMode(boolean exploreMode) {
this.exploreMode = exploreMode;
}
private boolean isExploreMode() { return exploreMode; }
public void setTitle(String title) {
this.title = title;
}
private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
};
private void toggleExplorerMode(boolean enabled) {
folders = new ArrayList<File>();
setExploreMode(enabled);
if(enabled) {
displayContentFolder(Environment.getExternalStorageDirectory());
imgExploreMode.setIcon(theme.getIcon(CommunityMaterial.Icon.cmd_folder));
exploreModePanel.setVisibility(View.VISIBLE);
} else {
currentFolderPath.setText(R.string.local_folder);
for (Album album : ((MyApplication) getActivity().getApplicationContext()).getAlbums().dispAlbums) {
folders.add(new File(album.getPath()));
}
imgExploreMode.setIcon(theme.getIcon(CommunityMaterial.Icon.cmd_compass_outline));
exploreModePanel.setVisibility(View.GONE);
}
adapter.notifyDataSetChanged();
}
class BottomSheetAlbumsAdapter extends RecyclerView.Adapter<BottomSheetAlbumsAdapter.ViewHolder> {
BottomSheetAlbumsAdapter() {}
public BottomSheetAlbumsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.select_folder_bottom_sheet_item, parent, false);
v.setOnClickListener(onClickListener);
return new ViewHolder(v);
/*return new ViewHolder(MaterialRippleLayout.on(v)
.rippleOverlay(true)
.rippleAlpha(0.2f)
.rippleColor(0xFF585858)
.rippleHover(true)
.rippleDuration(1)
.create()
);*/
}
@Override
public void onBindViewHolder(final BottomSheetAlbumsAdapter.ViewHolder holder, final int position) {
File f = folders.get(position);
String[] list = f.list();
int count = list == null ? 0 : list.length;
holder.folderName.setText(f.getName());
holder.folderName.setTag(f.getPath());
/** SET UP THEME**/
holder.folderName.setTextColor(theme.getTextColor());
String hexAccentColor = String.format("#%06X", (0xFFFFFF & theme.getAccentColor()));
holder.folderCount.setText(Html.fromHtml("<b><font color='" + hexAccentColor + "'>" + count + "</font></b>" + "<font " + "color='" + theme.getSubTextColor() + "'> Media</font>"));
holder.imgFolder.setColor(theme.getIconColor());
holder.imgFolder.setIcon(theme.getIcon(CommunityMaterial.Icon.cmd_folder));
if(canGoBack() && position == 0) { // go to parent folder
holder.folderName.setText("..");
holder.folderCount.setText(Html.fromHtml("<font color='" + theme.getSubTextColor() + "'>Go to parent</font>"));
holder.imgFolder.setIcon(theme.getIcon(CommunityMaterial.Icon.cmd_arrow_up));
}
}
public int getItemCount() {
return folders.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView folderName;
TextView folderCount;
IconicsImageView imgFolder;
ViewHolder(View itemView) {
super(itemView);
folderName = (TextView) itemView.findViewById(R.id.name_folder);
folderCount = (TextView) itemView.findViewById(R.id.count_folder);
imgFolder = (IconicsImageView) itemView.findViewById(R.id.folder_icon_bottom_sheet_item);
}
}
}
}