aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/layout/simple_dir_chooser.xml6
-rw-r--r--main/src/cgeo/geocaching/files/SimpleDirChooser.java26
-rw-r--r--main/src/cgeo/geocaching/settings/SettingsActivity.java11
3 files changed, 31 insertions, 12 deletions
diff --git a/main/res/layout/simple_dir_chooser.xml b/main/res/layout/simple_dir_chooser.xml
index f7e03d8..637a2e1 100644
--- a/main/res/layout/simple_dir_chooser.xml
+++ b/main/res/layout/simple_dir_chooser.xml
@@ -49,15 +49,17 @@
<Button
android:id="@+id/simple_dir_chooser_ok"
style="@style/button_full"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:layout_weight="1"
android:text="@android:string/ok" />
<Button
android:id="@+id/simple_dir_chooser_cancel"
style="@style/button_full"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:layout_weight="1"
android:text="@android:string/cancel" />
</LinearLayout>
diff --git a/main/src/cgeo/geocaching/files/SimpleDirChooser.java b/main/src/cgeo/geocaching/files/SimpleDirChooser.java
index 2d3565a..266cf89 100644
--- a/main/src/cgeo/geocaching/files/SimpleDirChooser.java
+++ b/main/src/cgeo/geocaching/files/SimpleDirChooser.java
@@ -32,17 +32,20 @@ import java.util.List;
* Dialog for choosing a file or directory.
*/
public class SimpleDirChooser extends AbstractListActivity {
+ public static final String EXTRA_CHOOSE_FOR_WRITING = "chooseForWriting";
private static final String PARENT_DIR = ".. ";
private File currentDir;
private FileArrayAdapter adapter;
private Button okButton = null;
private int lastPosition = -1;
+ private boolean chooseForWriting = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Bundle extras = getIntent().getExtras();
currentDir = dirContaining(extras.getString(Intents.EXTRA_START_DIR));
+ chooseForWriting = extras.getBoolean(SimpleDirChooser.EXTRA_CHOOSE_FOR_WRITING, false);
ActivityMixin.setTheme(this);
setContentView(R.layout.simple_dir_chooser);
@@ -91,13 +94,13 @@ public class SimpleDirChooser extends AbstractListActivity {
List<Option> listDirs = new ArrayList<Option>();
try {
for (File currentDir : dirs) {
- listDirs.add(new Option(currentDir.getName(), currentDir.getAbsolutePath()));
+ listDirs.add(new Option(currentDir.getName(), currentDir.getAbsolutePath(), currentDir.canWrite()));
}
} catch (RuntimeException e) {
}
Collections.sort(listDirs);
if (dir.getParent() != null) {
- listDirs.add(0, new Option(PARENT_DIR, dir.getParent()));
+ listDirs.add(0, new Option(PARENT_DIR, dir.getParent(), false));
}
this.adapter = new FileArrayAdapter(this, R.layout.simple_dir_item, listDirs);
this.setListAdapter(adapter);
@@ -138,8 +141,13 @@ public class SimpleDirChooser extends AbstractListActivity {
}
CheckBox check = (CheckBox) v.findViewById(R.id.CheckBox);
if (check != null) {
- check.setOnClickListener(new OnCheckBoxClickListener(position));
- check.setChecked(option.isChecked());
+ if (!chooseForWriting || option.isWriteable()) {
+ check.setOnClickListener(new OnCheckBoxClickListener(position));
+ check.setChecked(option.isChecked());
+ check.setEnabled(true);
+ } else {
+ check.setEnabled(false);
+ }
}
}
return v;
@@ -204,10 +212,12 @@ public class SimpleDirChooser extends AbstractListActivity {
private final String name;
private final String path;
private boolean checked = false;
+ private boolean writeable = false;
- public Option(String name, String path) {
+ public Option(String name, String path, boolean writeable) {
this.name = name;
this.path = path;
+ this.writeable = writeable;
}
public String getName() {
@@ -226,6 +236,10 @@ public class SimpleDirChooser extends AbstractListActivity {
this.checked = checked;
}
+ public boolean isWriteable() {
+ return writeable;
+ }
+
@Override
public int compareTo(Option other) {
if (other != null && this.name != null) {
@@ -240,7 +254,7 @@ public class SimpleDirChooser extends AbstractListActivity {
@Override
public boolean accept(File dir, String filename) {
File file = new File(dir, filename);
- return file.isDirectory() && file.canWrite();
+ return file.isDirectory() && file.canRead();
}
}
diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java
index 22a0907..6ba3e04 100644
--- a/main/src/cgeo/geocaching/settings/SettingsActivity.java
+++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java
@@ -73,18 +73,20 @@ public class SettingsActivity extends PreferenceActivity {
*/
private enum DirChooserType {
GPX_IMPORT_DIR(1, R.string.pref_gpxImportDir,
- Environment.getExternalStorageDirectory().getPath() + "/gpx"),
+ Environment.getExternalStorageDirectory().getPath() + "/gpx", false),
GPX_EXPORT_DIR(2, R.string.pref_gpxExportDir,
- Environment.getExternalStorageDirectory().getPath() + "/gpx"),
- THEMES_DIR(3, R.string.pref_renderthemepath, "");
+ Environment.getExternalStorageDirectory().getPath() + "/gpx", true),
+ THEMES_DIR(3, R.string.pref_renderthemepath, "", false);
public final int requestCode;
public final int keyId;
public final String defaultValue;
+ public final boolean writeMode;
- DirChooserType(final int requestCode, final int keyId, final String defaultValue) {
+ DirChooserType(final int requestCode, final int keyId, final String defaultValue, final boolean writeMode) {
this.requestCode = requestCode;
this.keyId = keyId;
this.defaultValue = defaultValue;
+ this.writeMode = writeMode;
}
}
@@ -306,6 +308,7 @@ public class SettingsActivity extends PreferenceActivity {
// OI file manager not available
final Intent dirChooser = new Intent(this, SimpleDirChooser.class);
dirChooser.putExtra(Intents.EXTRA_START_DIR, startDirectory);
+ dirChooser.putExtra(SimpleDirChooser.EXTRA_CHOOSE_FOR_WRITING, dct.writeMode);
startActivityForResult(dirChooser, dct.requestCode);
}
}