package com.turhanoz.android.reactivedirectorychooser.ui; import android.content.DialogInterface; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.DialogFragment; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.software.shell.fab.ActionButton; import com.turhanoz.android.reactivedirectorychooser.controller.DirectoryController; import com.turhanoz.android.reactivedirectorychooser.event.CurrentRootDirectoryChangedEvent; import com.turhanoz.android.reactivedirectorychooser.event.OnDirectoryCancelEvent; import com.turhanoz.android.reactivedirectorychooser.event.OnDirectoryChosenEvent; import com.turhanoz.android.reactivedirectorychooser.event.OperationFailedEvent; import com.turhanoz.android.reactivedirectorychooser.event.UpdateDirectoryTreeEvent; import com.turhanoz.android.reactivedirectorychooser.utils.BusUtils; import com.turhanoz.reactivedirectorychooser.R; import java.io.File; import de.greenrobot.event.EventBus; public class DirectoryChooserFragment extends DialogFragment implements View.OnClickListener{ RecyclerView recyclerView; TextView cardView; ActionButton floatingActionButton; Button selectDirectoryButton; EventBus bus; DirectoryController directoryController; File currentRootDirectory; public static DirectoryChooserFragment newInstance(File rootDirectory) { DirectoryChooserFragment directoryChooserFragment = new DirectoryChooserFragment(); Bundle args = new Bundle(); args.putSerializable("rootDirectory", rootDirectory); directoryChooserFragment.setArguments(args); return directoryChooserFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCurrentRootDirectory(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, 0); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); BusUtils.register(bus, getActivity()); } @Override public void onDestroy() { BusUtils.unregister(bus, getActivity()); super.onDestroy(); } private void setCurrentRootDirectory(Bundle savedInstanceState) { if (savedInstanceState != null) { currentRootDirectory = (File) savedInstanceState.getSerializable("currentRootDirectory"); } else { setCurrentDirectoryFromArgumentsOrDefault(); } } private void setCurrentDirectoryFromArgumentsOrDefault() { File rootDirectoryFromArgument = (File) getArguments().getSerializable("rootDirectory"); if (rootDirectoryFromArgument == null) { currentRootDirectory = Environment.getExternalStorageDirectory(); } else { currentRootDirectory = rootDirectoryFromArgument; } } @Override public void onSaveInstanceState(Bundle outState) { outState.putSerializable("currentRootDirectory", currentRootDirectory); super.onSaveInstanceState(outState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_directory_chooser, container, false); initGui(rootView); initBus(); intController(); updateDirectoryTree(); return rootView; } private void initGui(View rootView) { //Can not use ButterKnife on library project ! recyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view1); cardView = (TextView) rootView.findViewById(R.id.info_text); floatingActionButton = (ActionButton) rootView.findViewById(R.id.action_button); selectDirectoryButton = (Button) rootView.findViewById(R.id.select_button); floatingActionButton.setOnClickListener(this); selectDirectoryButton.setOnClickListener(this); } private void initBus() { bus = new EventBus(); bus.register(this); } private void intController() { directoryController = new DirectoryController(getActivity().getApplicationContext(), bus, recyclerView); BusUtils.register(bus, directoryController); } private void updateDirectoryTree() { directoryController.onEvent(new UpdateDirectoryTreeEvent(currentRootDirectory)); } public void onEvent(OperationFailedEvent event) { Log.d("TAG", getString(R.string.operation_not_allowed)); Toast.makeText(getActivity(), getString(R.string.operation_not_allowed), Toast.LENGTH_SHORT).show(); } public void onEvent(CurrentRootDirectoryChangedEvent event) { currentRootDirectory = event.getCurrentDirectory(); cardView.setText(event.getCurrentDirectory().toString()); } @Override public void onCancel(DialogInterface dialog) { bus.post(new OnDirectoryCancelEvent()); super.onCancel(dialog); } @Override public void onClick(View v) { if(v == floatingActionButton){ floatingActionButtonClicked(v); } else if(v == selectDirectoryButton){ selectDirectoryButtonClicked(v); } } private void floatingActionButtonClicked(View view) { new PromptDirectoryDialog(getActivity(), bus).createAndShow(currentRootDirectory); } private void selectDirectoryButtonClicked(View view) { bus.post(new OnDirectoryChosenEvent(currentRootDirectory)); dismiss(); } }