Add dropdown menu to menu folder picker
This commit is contained in:
parent
d4159afcec
commit
621c917bf4
app/src/main
java/ch/blinkenlights/android/vanilla
res
@ -33,13 +33,15 @@ import android.widget.Button;
|
||||
import android.widget.ListView;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
import android.widget.Spinner;
|
||||
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
|
||||
|
||||
public abstract class FolderPickerActivity extends Activity
|
||||
implements AdapterView.OnItemClickListener,
|
||||
AdapterView.OnItemLongClickListener
|
||||
AdapterView.OnItemLongClickListener,
|
||||
AdapterView.OnItemSelectedListener
|
||||
{
|
||||
|
||||
/**
|
||||
@ -54,15 +56,14 @@ public abstract class FolderPickerActivity extends Activity
|
||||
* Save button
|
||||
*/
|
||||
private Button mSaveButton;
|
||||
/**
|
||||
* Tristate spinner
|
||||
*/
|
||||
private Spinner mSpinner;
|
||||
/**
|
||||
* The array adapter of our listview
|
||||
*/
|
||||
private FolderPickerAdapter mListAdapter;
|
||||
/**
|
||||
* True if folder-tri-state selection mode
|
||||
* is enabled
|
||||
*/
|
||||
private boolean mTritastic;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@ -75,6 +76,7 @@ public abstract class FolderPickerActivity extends Activity
|
||||
mListView = (DragSortListView)findViewById(R.id.list);
|
||||
mPathDisplay = (EditText) findViewById(R.id.path_display);
|
||||
mSaveButton = (Button) findViewById(R.id.save_button);
|
||||
mSpinner = (Spinner) findViewById(R.id.folder_picker_spinner);
|
||||
|
||||
mListView.setAdapter(mListAdapter);
|
||||
mListView.setOnItemClickListener(this);
|
||||
@ -82,8 +84,12 @@ public abstract class FolderPickerActivity extends Activity
|
||||
mPathDisplay.addTextChangedListener(mTextWatcher);
|
||||
mSaveButton.setOnClickListener(mSaveButtonClickListener);
|
||||
|
||||
mSpinner.setSelection(0);
|
||||
mSpinner.setOnItemSelectedListener(this);
|
||||
|
||||
// init defaults
|
||||
enableTritasticSelect(false, null, null);
|
||||
enableTritasticSpinner(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -134,14 +140,21 @@ public abstract class FolderPickerActivity extends Activity
|
||||
* @param excluded initial list of excluded dirs
|
||||
*/
|
||||
public void enableTritasticSelect(boolean enabled, ArrayList<String> included, ArrayList<String> excluded) {
|
||||
mTritastic = enabled;
|
||||
mListAdapter.setIncludedDirs(enabled ? included : null);
|
||||
mListAdapter.setExcludedDirs(enabled ? excluded : null);
|
||||
if (enabled) {
|
||||
Toast.makeText(this, R.string.hint_long_press_to_modify_folder, Toast.LENGTH_SHORT).show();
|
||||
mListAdapter.setIncludedDirs(included);
|
||||
mListAdapter.setExcludedDirs(excluded);
|
||||
}
|
||||
mListView.setOnItemLongClickListener(enabled ? this : null);
|
||||
mSaveButton.setText(enabled ? R.string.save : R.string.select);
|
||||
}
|
||||
|
||||
if (enabled)
|
||||
Toast.makeText(this, R.string.hint_long_press_to_modify_folder, Toast.LENGTH_SHORT).show();
|
||||
/**
|
||||
* Whether or not to enable the tristate spinner.
|
||||
*/
|
||||
public void enableTritasticSpinner(boolean enabled) {
|
||||
View view = findViewById(R.id.folder_picker_spinner_container);
|
||||
view.setVisibility(enabled ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,6 +164,7 @@ public abstract class FolderPickerActivity extends Activity
|
||||
*/
|
||||
void setCurrentDir(File dir) {
|
||||
mSaveButton.setEnabled(dir.isDirectory());
|
||||
mSpinner.setEnabled(dir.isDirectory());
|
||||
mListAdapter.setCurrentDir(dir);
|
||||
mListView.setSelectionFromTop(0, 0);
|
||||
|
||||
@ -163,6 +177,15 @@ public abstract class FolderPickerActivity extends Activity
|
||||
final String label = dir.getAbsolutePath();
|
||||
mPathDisplay.setText(label);
|
||||
mPathDisplay.setSelection(label.length());
|
||||
|
||||
// Since the folder changed, also update the spinner state.
|
||||
if (mListAdapter.getIncludedDirs().contains(label)) {
|
||||
mSpinner.setSelection(0);
|
||||
} else if (mListAdapter.getExcludedDirs().contains(label)) {
|
||||
mSpinner.setSelection(1);
|
||||
} else {
|
||||
mSpinner.setSelection(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,6 +208,31 @@ public abstract class FolderPickerActivity extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called if user interacts with the spinner.
|
||||
*/
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
FolderState state = FolderState.NEUTRAL;
|
||||
switch(position) {
|
||||
case 0:
|
||||
state = FolderState.INCLUDE;
|
||||
break;
|
||||
case 1:
|
||||
state = FolderState.EXCLUDE;
|
||||
break;
|
||||
}
|
||||
setFolderState(mListAdapter.getCurrentDir().getAbsolutePath(), state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called if user dismisses the spinner.
|
||||
*/
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
// noop.
|
||||
}
|
||||
|
||||
/**
|
||||
* Called if user taps a row
|
||||
*/
|
||||
|
@ -67,11 +67,11 @@ public class FolderPickerAdapter
|
||||
/**
|
||||
* A list of paths marked as 'included'
|
||||
*/
|
||||
private ArrayList<String> mIncludedDirs;
|
||||
private ArrayList<String> mIncludedDirs = new ArrayList<String>();
|
||||
/**
|
||||
* A list of paths marked as 'excluded'
|
||||
*/
|
||||
private ArrayList<String> mExcludedDirs;
|
||||
private ArrayList<String> mExcludedDirs = new ArrayList<String>();
|
||||
|
||||
|
||||
public FolderPickerAdapter(Context context, int resource) {
|
||||
@ -162,9 +162,6 @@ public class FolderPickerAdapter
|
||||
* @return list the checked list
|
||||
*/
|
||||
private ArrayList<String> verifyDirs(ArrayList<String> list) {
|
||||
if (list == null)
|
||||
return null;
|
||||
|
||||
ArrayList<String> result = new ArrayList<String>();
|
||||
for (String path : list) {
|
||||
File file = new File(path);
|
||||
@ -200,9 +197,9 @@ public class FolderPickerAdapter
|
||||
for(File fentry: dirs) {
|
||||
if(fentry.isDirectory()) {
|
||||
int color = 0;
|
||||
if (mIncludedDirs != null && mIncludedDirs.contains(fentry.getAbsolutePath()))
|
||||
if (mIncludedDirs.contains(fentry.getAbsolutePath()))
|
||||
color = 0xff00c853;
|
||||
if (mExcludedDirs != null && mExcludedDirs.contains(fentry.getAbsolutePath()))
|
||||
if (mExcludedDirs.contains(fentry.getAbsolutePath()))
|
||||
color = 0xffd50000;
|
||||
Item item = new Item(fentry.getName(), fentry, color);
|
||||
add(item);
|
||||
|
@ -38,9 +38,11 @@ public class MediaFoldersSelectionActivity extends FolderPickerActivity {
|
||||
MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(this);
|
||||
File startPath = FileUtils.getFilesystemBrowseStart(this);
|
||||
|
||||
// Make sure that we display the current selection
|
||||
setCurrentDir(startPath);
|
||||
// Setup UI and enable tritastic options.
|
||||
enableTritasticSelect(true, prefs.mediaFolders, prefs.blacklistedFolders);
|
||||
enableTritasticSpinner(true);
|
||||
// ...and jump to the folder.
|
||||
setCurrentDir(startPath);
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,4 +66,27 @@ THE SOFTWARE.
|
||||
android:choiceMode="none"
|
||||
dslv:drag_enabled="false" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/folder_picker_spinner_container"
|
||||
android:visibility="gone"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/cover_size"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal" >
|
||||
<TextView
|
||||
android:text="@string/folder_picker_spinner_desc"
|
||||
android:textColor="?overlay_foreground_color"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginLeft="@dimen/text_padding"
|
||||
/>
|
||||
<Spinner
|
||||
android:id="@+id/folder_picker_spinner"
|
||||
android:entries="@array/folder_picker_spinner_entries"
|
||||
android:layout_weight="2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -390,6 +390,7 @@ THE SOFTWARE.
|
||||
<string name="media_scan_preferences">Scanner options</string>
|
||||
<string name="media_scan_preferences_change_title">Scanner options changed</string>
|
||||
<string name="media_scan_preferences_change_message">Changing this option will start a full rescan of your library. Would you like to continue?</string>
|
||||
<string name="folder_picker_spinner_desc">Status of Directory:</string>
|
||||
|
||||
<!-- Folder selector -->
|
||||
<string name="hint_long_press_to_modify_folder">Long press to modify folder options</string>
|
||||
|
@ -158,6 +158,15 @@ THE SOFTWARE.
|
||||
<item>@string/fixed_info</item>
|
||||
</string-array>
|
||||
|
||||
|
||||
<!-- START folder_picker_spinner -->
|
||||
<string-array name="folder_picker_spinner_entries">
|
||||
<item>@string/folder_include</item>
|
||||
<item>@string/folder_exclude</item>
|
||||
<item>@string/folder_neutral</item>
|
||||
</string-array>
|
||||
<!-- END folder_picker_spinner -->
|
||||
|
||||
<string name="empty"></string>
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user