Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

Commit

Permalink
Merge pull request #92 from rastikw/SingleClick
Browse files Browse the repository at this point in the history
Select one file with a single click
  • Loading branch information
spacecowboy authored Jun 25, 2016
2 parents 5074ab5 + 16ac20d commit c2a3234
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ public abstract class AbstractFilePickerActivity<T> extends AppCompatActivity
public static final String EXTRA_MODE = "nononsense.intent.MODE";
public static final String EXTRA_ALLOW_CREATE_DIR =
"nononsense.intent" + ".ALLOW_CREATE_DIR";
public static final String EXTRA_SINGLE_CLICK =
"nononsense.intent" + ".SINGLE_CLICK";
// For compatibility
public static final String EXTRA_ALLOW_MULTIPLE =
"android.intent.extra" + ".ALLOW_MULTIPLE";
Expand All @@ -70,6 +72,7 @@ public abstract class AbstractFilePickerActivity<T> extends AppCompatActivity
protected int mode = AbstractFilePickerFragment.MODE_FILE;
protected boolean allowCreateDir = false;
protected boolean allowMultiple = false;
protected boolean singleClick = false;

@Override
@SuppressWarnings("unchecked")
Expand All @@ -86,6 +89,8 @@ protected void onCreate(Bundle savedInstanceState) {
allowCreateDir);
allowMultiple =
intent.getBooleanExtra(EXTRA_ALLOW_MULTIPLE, allowMultiple);
singleClick =
intent.getBooleanExtra(EXTRA_SINGLE_CLICK, singleClick);
}

FragmentManager fm = getSupportFragmentManager();
Expand All @@ -94,7 +99,7 @@ protected void onCreate(Bundle savedInstanceState) {

if (fragment == null) {
fragment =
getFragment(startPath, mode, allowMultiple, allowCreateDir);
getFragment(startPath, mode, allowMultiple, allowCreateDir, singleClick);
}

if (fragment != null) {
Expand All @@ -108,7 +113,7 @@ protected void onCreate(Bundle savedInstanceState) {

protected abstract AbstractFilePickerFragment<T> getFragment(
@Nullable final String startPath, final int mode, final boolean allowMultiple,
final boolean allowCreateDir);
final boolean allowCreateDir, final boolean singleClick);

@Override
public void onSaveInstanceState(Bundle b) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ public abstract class AbstractFilePickerFragment<T> extends Fragment
public static final String KEY_ALLOW_DIR_CREATE = "KEY_ALLOW_DIR_CREATE";
// Allow multiple items to be selected.
public static final String KEY_ALLOW_MULTIPLE = "KEY_ALLOW_MULTIPLE";
// If file can be selected by clicking only and checkboxes are not visible
public static final String KEY_SINGLE_CLICK = "KEY_SINGLE_CLICK";
// Used for saving state.
protected static final String KEY_CURRENT_PATH = "KEY_CURRENT_PATH";
protected final HashSet<T> mCheckedItems;
Expand All @@ -67,6 +69,7 @@ public abstract class AbstractFilePickerFragment<T> extends Fragment
protected T mCurrentPath = null;
protected boolean allowCreateDir = false;
protected boolean allowMultiple = false;
protected boolean singleClick = false;
protected OnFilePickedListener mListener;
protected FileItemAdapter<T> mAdapter = null;
protected TextView mCurrentDirView;
Expand Down Expand Up @@ -110,7 +113,8 @@ protected FileItemAdapter<T> getDummyAdapter() {
* @param allowDirCreate can new directories be created?
*/
public void setArgs(@Nullable final String startPath, final int mode,
final boolean allowMultiple, final boolean allowDirCreate) {
final boolean allowMultiple, final boolean allowDirCreate,
final boolean singleClick) {
// There might have been arguments set elsewhere, if so do not overwrite them.
Bundle b = getArguments();
if (b == null) {
Expand All @@ -122,6 +126,7 @@ public void setArgs(@Nullable final String startPath, final int mode,
}
b.putBoolean(KEY_ALLOW_DIR_CREATE, allowDirCreate);
b.putBoolean(KEY_ALLOW_MULTIPLE, allowMultiple);
b.putBoolean(KEY_SINGLE_CLICK, singleClick);
b.putInt(KEY_MODE, mode);
setArguments(b);
}
Expand Down Expand Up @@ -301,6 +306,8 @@ public void onActivityCreated(Bundle savedInstanceState) {
.getBoolean(KEY_ALLOW_DIR_CREATE, allowCreateDir);
allowMultiple = savedInstanceState
.getBoolean(KEY_ALLOW_MULTIPLE, allowMultiple);
singleClick = savedInstanceState
.getBoolean(KEY_SINGLE_CLICK, singleClick);

String path = savedInstanceState.getString(KEY_CURRENT_PATH);
if (path != null) {
Expand All @@ -312,6 +319,8 @@ public void onActivityCreated(Bundle savedInstanceState) {
.getBoolean(KEY_ALLOW_DIR_CREATE, allowCreateDir);
allowMultiple = getArguments()
.getBoolean(KEY_ALLOW_MULTIPLE, allowMultiple);
singleClick = getArguments()
.getBoolean(KEY_SINGLE_CLICK, singleClick);
if (getArguments().containsKey(KEY_START_PATH)) {
String path = getArguments().getString(KEY_START_PATH);
if (path != null) {
Expand All @@ -321,6 +330,8 @@ public void onActivityCreated(Bundle savedInstanceState) {
}
}

if (singleClick) getActivity().findViewById(R.id.nnf_button_ok).setVisibility(View.GONE);

// If still null
if (mCurrentPath == null) {
mCurrentPath = getRoot();
Expand Down Expand Up @@ -357,6 +368,7 @@ public void onSaveInstanceState(Bundle b) {
b.putString(KEY_CURRENT_PATH, mCurrentPath.toString());
b.putBoolean(KEY_ALLOW_MULTIPLE, allowMultiple);
b.putBoolean(KEY_ALLOW_DIR_CREATE, allowCreateDir);
b.putBoolean(KEY_SINGLE_CLICK, singleClick);
b.putInt(KEY_MODE, mode);
}

Expand Down Expand Up @@ -605,7 +617,12 @@ public void onClickCheckable(@NonNull View view, @NonNull CheckableViewHolder vi
if (isDir(viewHolder.file)) {
goToDir(viewHolder.file);
} else {
onLongClickCheckable(view, viewHolder);
if (!allowMultiple && singleClick) {
// Clear is necessary, in case user clicked some checkbox directly
mCheckedItems.clear();
mCheckedItems.add(viewHolder.file);
onClickOk(null);
} else onLongClickCheckable(view, viewHolder);
}
}

Expand Down Expand Up @@ -729,6 +746,7 @@ public class CheckableViewHolder extends DirViewHolder {
public CheckableViewHolder(View v) {
super(v);
checkbox = (CheckBox) v.findViewById(R.id.checkbox);
if (singleClick) checkbox.setVisibility(View.GONE);
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public FilePickerActivity() {
@Override
protected AbstractFilePickerFragment<File> getFragment(
@Nullable final String startPath, final int mode, final boolean allowMultiple,
final boolean allowCreateDir) {
final boolean allowCreateDir, final boolean singleClick) {
AbstractFilePickerFragment<File> fragment = new FilePickerFragment();
// startPath is allowed to be null. In that case, default folder should be SD-card and not "/"
fragment.setArgs(startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(),
mode, allowMultiple, allowCreateDir);
mode, allowMultiple, allowCreateDir, singleClick);
return fragment;
}
}

0 comments on commit c2a3234

Please sign in to comment.