Add dropdown menu to menu folder picker
This commit is contained in:
parent
d4159afcec
commit
621c917bf4
@ -33,13 +33,15 @@ import android.widget.Button;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
|
||||||
import com.mobeta.android.dslv.DragSortListView;
|
import com.mobeta.android.dslv.DragSortListView;
|
||||||
|
|
||||||
|
|
||||||
public abstract class FolderPickerActivity extends Activity
|
public abstract class FolderPickerActivity extends Activity
|
||||||
implements AdapterView.OnItemClickListener,
|
implements AdapterView.OnItemClickListener,
|
||||||
AdapterView.OnItemLongClickListener
|
AdapterView.OnItemLongClickListener,
|
||||||
|
AdapterView.OnItemSelectedListener
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,15 +56,14 @@ public abstract class FolderPickerActivity extends Activity
|
|||||||
* Save button
|
* Save button
|
||||||
*/
|
*/
|
||||||
private Button mSaveButton;
|
private Button mSaveButton;
|
||||||
|
/**
|
||||||
|
* Tristate spinner
|
||||||
|
*/
|
||||||
|
private Spinner mSpinner;
|
||||||
/**
|
/**
|
||||||
* The array adapter of our listview
|
* The array adapter of our listview
|
||||||
*/
|
*/
|
||||||
private FolderPickerAdapter mListAdapter;
|
private FolderPickerAdapter mListAdapter;
|
||||||
/**
|
|
||||||
* True if folder-tri-state selection mode
|
|
||||||
* is enabled
|
|
||||||
*/
|
|
||||||
private boolean mTritastic;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@ -75,6 +76,7 @@ public abstract class FolderPickerActivity extends Activity
|
|||||||
mListView = (DragSortListView)findViewById(R.id.list);
|
mListView = (DragSortListView)findViewById(R.id.list);
|
||||||
mPathDisplay = (EditText) findViewById(R.id.path_display);
|
mPathDisplay = (EditText) findViewById(R.id.path_display);
|
||||||
mSaveButton = (Button) findViewById(R.id.save_button);
|
mSaveButton = (Button) findViewById(R.id.save_button);
|
||||||
|
mSpinner = (Spinner) findViewById(R.id.folder_picker_spinner);
|
||||||
|
|
||||||
mListView.setAdapter(mListAdapter);
|
mListView.setAdapter(mListAdapter);
|
||||||
mListView.setOnItemClickListener(this);
|
mListView.setOnItemClickListener(this);
|
||||||
@ -82,8 +84,12 @@ public abstract class FolderPickerActivity extends Activity
|
|||||||
mPathDisplay.addTextChangedListener(mTextWatcher);
|
mPathDisplay.addTextChangedListener(mTextWatcher);
|
||||||
mSaveButton.setOnClickListener(mSaveButtonClickListener);
|
mSaveButton.setOnClickListener(mSaveButtonClickListener);
|
||||||
|
|
||||||
|
mSpinner.setSelection(0);
|
||||||
|
mSpinner.setOnItemSelectedListener(this);
|
||||||
|
|
||||||
// init defaults
|
// init defaults
|
||||||
enableTritasticSelect(false, null, null);
|
enableTritasticSelect(false, null, null);
|
||||||
|
enableTritasticSpinner(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,14 +140,21 @@ public abstract class FolderPickerActivity extends Activity
|
|||||||
* @param excluded initial list of excluded dirs
|
* @param excluded initial list of excluded dirs
|
||||||
*/
|
*/
|
||||||
public void enableTritasticSelect(boolean enabled, ArrayList<String> included, ArrayList<String> excluded) {
|
public void enableTritasticSelect(boolean enabled, ArrayList<String> included, ArrayList<String> excluded) {
|
||||||
mTritastic = enabled;
|
if (enabled) {
|
||||||
mListAdapter.setIncludedDirs(enabled ? included : null);
|
Toast.makeText(this, R.string.hint_long_press_to_modify_folder, Toast.LENGTH_SHORT).show();
|
||||||
mListAdapter.setExcludedDirs(enabled ? excluded : null);
|
mListAdapter.setIncludedDirs(included);
|
||||||
|
mListAdapter.setExcludedDirs(excluded);
|
||||||
|
}
|
||||||
mListView.setOnItemLongClickListener(enabled ? this : null);
|
mListView.setOnItemLongClickListener(enabled ? this : null);
|
||||||
mSaveButton.setText(enabled ? R.string.save : R.string.select);
|
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) {
|
void setCurrentDir(File dir) {
|
||||||
mSaveButton.setEnabled(dir.isDirectory());
|
mSaveButton.setEnabled(dir.isDirectory());
|
||||||
|
mSpinner.setEnabled(dir.isDirectory());
|
||||||
mListAdapter.setCurrentDir(dir);
|
mListAdapter.setCurrentDir(dir);
|
||||||
mListView.setSelectionFromTop(0, 0);
|
mListView.setSelectionFromTop(0, 0);
|
||||||
|
|
||||||
@ -163,6 +177,15 @@ public abstract class FolderPickerActivity extends Activity
|
|||||||
final String label = dir.getAbsolutePath();
|
final String label = dir.getAbsolutePath();
|
||||||
mPathDisplay.setText(label);
|
mPathDisplay.setText(label);
|
||||||
mPathDisplay.setSelection(label.length());
|
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
|
* Called if user taps a row
|
||||||
*/
|
*/
|
||||||
|
@ -67,11 +67,11 @@ public class FolderPickerAdapter
|
|||||||
/**
|
/**
|
||||||
* A list of paths marked as 'included'
|
* 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'
|
* A list of paths marked as 'excluded'
|
||||||
*/
|
*/
|
||||||
private ArrayList<String> mExcludedDirs;
|
private ArrayList<String> mExcludedDirs = new ArrayList<String>();
|
||||||
|
|
||||||
|
|
||||||
public FolderPickerAdapter(Context context, int resource) {
|
public FolderPickerAdapter(Context context, int resource) {
|
||||||
@ -162,9 +162,6 @@ public class FolderPickerAdapter
|
|||||||
* @return list the checked list
|
* @return list the checked list
|
||||||
*/
|
*/
|
||||||
private ArrayList<String> verifyDirs(ArrayList<String> list) {
|
private ArrayList<String> verifyDirs(ArrayList<String> list) {
|
||||||
if (list == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
ArrayList<String> result = new ArrayList<String>();
|
ArrayList<String> result = new ArrayList<String>();
|
||||||
for (String path : list) {
|
for (String path : list) {
|
||||||
File file = new File(path);
|
File file = new File(path);
|
||||||
@ -200,9 +197,9 @@ public class FolderPickerAdapter
|
|||||||
for(File fentry: dirs) {
|
for(File fentry: dirs) {
|
||||||
if(fentry.isDirectory()) {
|
if(fentry.isDirectory()) {
|
||||||
int color = 0;
|
int color = 0;
|
||||||
if (mIncludedDirs != null && mIncludedDirs.contains(fentry.getAbsolutePath()))
|
if (mIncludedDirs.contains(fentry.getAbsolutePath()))
|
||||||
color = 0xff00c853;
|
color = 0xff00c853;
|
||||||
if (mExcludedDirs != null && mExcludedDirs.contains(fentry.getAbsolutePath()))
|
if (mExcludedDirs.contains(fentry.getAbsolutePath()))
|
||||||
color = 0xffd50000;
|
color = 0xffd50000;
|
||||||
Item item = new Item(fentry.getName(), fentry, color);
|
Item item = new Item(fentry.getName(), fentry, color);
|
||||||
add(item);
|
add(item);
|
||||||
|
@ -38,9 +38,11 @@ public class MediaFoldersSelectionActivity extends FolderPickerActivity {
|
|||||||
MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(this);
|
MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(this);
|
||||||
File startPath = FileUtils.getFilesystemBrowseStart(this);
|
File startPath = FileUtils.getFilesystemBrowseStart(this);
|
||||||
|
|
||||||
// Make sure that we display the current selection
|
// Setup UI and enable tritastic options.
|
||||||
setCurrentDir(startPath);
|
|
||||||
enableTritasticSelect(true, prefs.mediaFolders, prefs.blacklistedFolders);
|
enableTritasticSelect(true, prefs.mediaFolders, prefs.blacklistedFolders);
|
||||||
|
enableTritasticSpinner(true);
|
||||||
|
// ...and jump to the folder.
|
||||||
|
setCurrentDir(startPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,4 +66,27 @@ THE SOFTWARE.
|
|||||||
android:choiceMode="none"
|
android:choiceMode="none"
|
||||||
dslv:drag_enabled="false" />
|
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>
|
</LinearLayout>
|
||||||
|
@ -390,6 +390,7 @@ THE SOFTWARE.
|
|||||||
<string name="media_scan_preferences">Scanner options</string>
|
<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_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="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 -->
|
<!-- Folder selector -->
|
||||||
<string name="hint_long_press_to_modify_folder">Long press to modify folder options</string>
|
<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>
|
<item>@string/fixed_info</item>
|
||||||
</string-array>
|
</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>
|
<string name="empty"></string>
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user