diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 41cd1894..c47bdfa8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -125,6 +125,14 @@
+
+
+
startActivityForResult(FolderPickerActivity.createIntent(this, mFolder.path, null), FolderPickerActivity.DIRECTORY_REQUEST_CODE));
+ findViewById(R.id.pullOrderContainer).setOnClickListener(v -> showPullOrderDialog());
findViewById(R.id.versioningContainer).setOnClickListener(v -> showVersioningDialog());
mEditIgnores.setOnClickListener(v -> editIgnores());
@@ -213,6 +219,12 @@ public class FolderActivity extends SyncthingActivity
}
}
+ private void showPullOrderDialog() {
+ Intent intent = new Intent(this, PullOrderDialogActivity.class);
+ intent.putExtra(PullOrderDialogActivity.EXTRA_PULL_ORDER, mFolder.order);
+ startActivityForResult(intent, PULL_ORDER_DIALOG_REQUEST);
+ }
+
private void showVersioningDialog() {
Intent intent = new Intent(this, VersioningDialogActivity.class);
intent.putExtras(getVersioningBundle());
@@ -336,6 +348,7 @@ public class FolderActivity extends SyncthingActivity
mLabelView.setText(mFolder.label);
mIdView.setText(mFolder.id);
mPathView.setText(mFolder.path);
+ updatePullOrderDescription();
updateVersioningDescription();
mFolderMasterView.setChecked(Objects.equal(mFolder.type, "readonly"));
mFolderFileWatcher.setChecked(mFolder.fsWatcherEnabled);
@@ -430,6 +443,10 @@ public class FolderActivity extends SyncthingActivity
mEditIgnores.setEnabled(true);
} else if (resultCode == Activity.RESULT_OK && requestCode == FILE_VERSIONING_DIALOG_REQUEST) {
updateVersioning(data.getExtras());
+ } else if (resultCode == Activity.RESULT_OK && requestCode == PULL_ORDER_DIALOG_REQUEST) {
+ mFolder.order = data.getStringExtra(PullOrderDialogActivity.EXTRA_RESULT_PULL_ORDER);
+ updatePullOrderDescription();
+ mFolderNeedsToUpdate = true;
}
}
@@ -546,6 +563,50 @@ public class FolderActivity extends SyncthingActivity
mFolderNeedsToUpdate = true;
}
+ private void updatePullOrderDescription() {
+ if (mFolder == null) {
+ return;
+ }
+
+ if (TextUtils.isEmpty(mFolder.order)) {
+ setPullOrderDescription(getString(R.string.pull_order_type_random),
+ getString(R.string.pull_order_type_random_description));
+ return;
+ }
+
+ switch (mFolder.order) {
+ case "random":
+ setPullOrderDescription(getString(R.string.pull_order_type_random),
+ getString(R.string.pull_order_type_random_description));
+ break;
+ case "alphabetic":
+ setPullOrderDescription(getString(R.string.pull_order_type_alphabetic),
+ getString(R.string.pull_order_type_alphabetic_description));
+ break;
+ case "smallestFirst":
+ setPullOrderDescription(getString(R.string.pull_order_type_smallestFirst),
+ getString(R.string.pull_order_type_smallestFirst_description));
+ break;
+ case "largestFirst":
+ setPullOrderDescription(getString(R.string.pull_order_type_largestFirst),
+ getString(R.string.pull_order_type_largestFirst_description));
+ break;
+ case "oldestFirst":
+ setPullOrderDescription(getString(R.string.pull_order_type_oldestFirst),
+ getString(R.string.pull_order_type_oldestFirst_description));
+ break;
+ case "newestFirst":
+ setPullOrderDescription(getString(R.string.pull_order_type_newestFirst),
+ getString(R.string.pull_order_type_newestFirst_description));
+ break;
+ }
+ }
+
+ private void setPullOrderDescription(String type, String description) {
+ mPullOrderTypeView.setText(type);
+ mPullOrderDescriptionView.setText(description);
+ }
+
private void updateVersioningDescription() {
if (mFolder == null){
return;
diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/PullOrderDialogActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/PullOrderDialogActivity.java
new file mode 100644
index 00000000..880991c5
--- /dev/null
+++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/PullOrderDialogActivity.java
@@ -0,0 +1,80 @@
+package com.nutomic.syncthingandroid.activities;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.Spinner;
+import com.nutomic.syncthingandroid.R;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class PullOrderDialogActivity extends AppCompatActivity {
+
+ public static final String EXTRA_PULL_ORDER = "com.nutomic.syncthinandroid.activities.PullOrderDialogActivity.PULL_ORDER";
+ public static final String EXTRA_RESULT_PULL_ORDER = "com.nutomic.syncthinandroid.activities.PullOrderDialogActivity.EXTRA_RESULT_PULL_ORDER";
+
+ private String selectedType;
+
+ private static final List mTypes = Arrays.asList(
+ "random",
+ "alphabetic",
+ "smallestFirst",
+ "largestFirst",
+ "oldestFirst",
+ "newestFirst"
+ );
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.fragment_pullorder_dialog);
+ if (savedInstanceState == null) {
+ selectedType = getIntent().getStringExtra(EXTRA_PULL_ORDER);
+ }
+ initiateFinishBtn();
+ initiateSpinner();
+ }
+
+ private void initiateFinishBtn() {
+ Button finishBtn = findViewById(R.id.finish_btn);
+ finishBtn.setOnClickListener(v -> {
+ saveConfiguration();
+ finish();
+ });
+ }
+
+ private void saveConfiguration() {
+ Intent intent = new Intent();
+ intent.putExtra(EXTRA_RESULT_PULL_ORDER, selectedType);
+ setResult(Activity.RESULT_OK, intent);
+ }
+
+ private void initiateSpinner() {
+ Spinner pullOrderTypeSpinner = findViewById(R.id.pullOrderTypeSpinner);
+ pullOrderTypeSpinner.setSelection(mTypes.indexOf(selectedType));
+ pullOrderTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ if (position != mTypes.indexOf(selectedType)) {
+ selectedType = mTypes.get(position);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+ // This is not allowed.
+ }
+ });
+ }
+
+ @Override
+ public void onBackPressed() {
+ saveConfiguration();
+ super.onBackPressed();
+ }
+}
diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml
index 5a2b906d..03c24ce3 100644
--- a/app/src/main/res/layout/fragment_folder.xml
+++ b/app/src/main/res/layout/fragment_folder.xml
@@ -110,6 +110,44 @@
android:drawableStart="@drawable/ic_folder_black_24dp"
android:text="@string/folder_pause" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b9613eea..819e6117 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -325,6 +325,15 @@ Please report any problems you encounter via Github.
Default Language
+
+ - Random
+ - Alphabetic
+ - Smallest First
+ - Largest First
+ - Oldest First
+ - Newest First
+
+
- None
- TrashCan
@@ -650,6 +659,25 @@ Please report any problems you encounter via Github.
Stopping Syncthing is not supported when running in background is enabled.
+
+ File Pull Order
+
+
+ Random
+ Alphabetic
+ Smallest First
+ Largest First
+ Oldest First
+ Newest First
+
+
+ Pull files in random order.
+ Pull files ordered by file name alphabetically.
+ Pull files ordered by file size. Smallest first respectively.
+ Pull files ordered by file size. Largest first respectively.
+ Pull files ordered by modification time. Oldest first respectively.
+ Pull files ordered by modification time. Newest first respectively.
+
Maximum Age
Clean out after