Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trait import update #1181

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,13 @@ public void onFieldCreated(int studyDbId) {
}
};

ListAddDialog dialog = new ListAddDialog(this, R.string.fields_new_dialog_title, importArray, icons, onItemClickListener);
ListAddDialog dialog = new ListAddDialog(
this,
getString(R.string.fields_new_dialog_title),
importArray,
icons,
onItemClickListener
);
dialog.show(getSupportFragmentManager(), "ListAddDialog");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout.LayoutParams;
Expand All @@ -49,6 +50,7 @@
import com.fieldbook.tracker.async.ImportCSVTask;
import com.fieldbook.tracker.brapi.BrapiInfoDialogFragment;
import com.fieldbook.tracker.database.DataHelper;
import com.fieldbook.tracker.dialogs.ListAddDialog;
import com.fieldbook.tracker.dialogs.ListSortDialog;
import com.fieldbook.tracker.dialogs.NewTraitDialog;
import com.fieldbook.tracker.objects.FieldFileObject;
Expand Down Expand Up @@ -330,7 +332,7 @@ public void onCreate(Bundle savedInstanceState) {
itemTouchHelper.attachToRecyclerView(traitList);

FloatingActionButton fab = findViewById(R.id.newTrait);
fab.setOnClickListener(v -> showTraitDialog(null));
fab.setOnClickListener(v -> showImportDialog());
}

@Override
Expand Down Expand Up @@ -378,11 +380,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
checkShowDeleteDialog();
} else if (itemId == R.id.sortTrait) {
showTraitSortDialog();
} else if (itemId == R.id.importexport) {
} else if (itemId == R.id.export) {
if (BaseDocumentTreeUtil.Companion.getRoot(this) != null
&& BaseDocumentTreeUtil.Companion.isEnabled(this)
&& BaseDocumentTreeUtil.Companion.getDirectory(this, R.string.dir_trait) != null) {
importExportDialog();
exportTraitFilePermission();
} else {
Toast.makeText(this, R.string.error_storage_directory, Toast.LENGTH_LONG).show();
}
Expand Down Expand Up @@ -437,50 +439,6 @@ private void changeAllVisibility() {
queryAndLoadTraits();
}

private void importExportDialog() {
LayoutInflater inflater = this.getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_list_buttonless, null);

ListView myList = layout.findViewById(R.id.myList);
String[] sortOptions = new String[2];
sortOptions[0] = getString(R.string.dialog_import);
sortOptions[1] = getString(R.string.traits_dialog_export);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_item_dialog_list, sortOptions);
myList.setAdapter(adapter);

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppAlertDialog);
builder.setTitle(R.string.settings_traits)
.setCancelable(true)
.setView(layout);

builder.setNegativeButton(getString(R.string.dialog_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});

final AlertDialog importExport = builder.create();
importExport.show();

android.view.WindowManager.LayoutParams params = importExport.getWindow().getAttributes();
params.width = LayoutParams.WRAP_CONTENT;
params.height = LayoutParams.WRAP_CONTENT;
importExport.getWindow().setAttributes(params);

myList.setOnItemClickListener((av, arg1, which, arg3) -> {
switch (which) {
case 0:
loadTraitFilePermission();
break;
case 1:
exportTraitFilePermission();
break;
}
importExport.dismiss();
});

}

@AfterPermissionGranted(PERMISSIONS_REQUEST_STORAGE_IMPORT)
public void loadTraitFilePermission() {

Expand Down Expand Up @@ -521,52 +479,62 @@ public void exportTraitFilePermission() {

private void showImportDialog() {

LayoutInflater inflater = this.getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_list_buttonless, null);

ListView myList = layout.findViewById(R.id.myList);
String[] importArray = new String[2];
importArray[0] = getString(R.string.import_source_local);
importArray[1] = getString(R.string.import_source_cloud);

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_item_dialog_list, importArray);
myList.setAdapter(adapter);

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppAlertDialog);
builder.setTitle(R.string.import_dialog_title_traits)
.setCancelable(true)
.setView(layout);

builder.setNegativeButton(getString(R.string.dialog_cancel), (dialog, which) -> dialog.dismiss());

final AlertDialog importDialog = builder.create();

importDialog.show();

android.view.WindowManager.LayoutParams params = importDialog.getWindow().getAttributes();
params.width = LayoutParams.MATCH_PARENT;
params.height = LayoutParams.WRAP_CONTENT;
importDialog.getWindow().setAttributes(params);
int optionCount = preferences.getBoolean(GeneralKeys.BRAPI_ENABLED, false) ? 4 : 3;
String[] importArray = new String[optionCount];
int[] icons = new int[optionCount];

importArray[0] = getString(R.string.traits_dialog_create);
importArray[1] = getString(R.string.import_source_local);
importArray[2] = getString(R.string.import_source_cloud);

icons[0] = R.drawable.ic_ruler;
icons[1] = R.drawable.ic_file_generic;
icons[2] = R.drawable.ic_file_cloud;

// Add BrAPI option if enabled
if (optionCount > 3) {
String displayName = preferences.getString(GeneralKeys.BRAPI_DISPLAY_NAME,
getString(R.string.brapi_edit_display_name_default));
importArray[3] = displayName;
icons[3] = R.drawable.ic_adv_brapi;
}

myList.setOnItemClickListener((av, arg1, which, arg3) -> {
Intent intent = new Intent();
switch (which) {
case 0:
DocumentFile traitDir = BaseDocumentTreeUtil.Companion.getDirectory(this, R.string.dir_trait);
if (traitDir != null && traitDir.exists()) {
intent.setClassName(this, FileExploreActivity.class.getName());
intent.putExtra("path", traitDir.getUri().toString());
intent.putExtra("include", new String[]{"trt"});
intent.putExtra("title", getString(R.string.traits_dialog_import));
startActivityForResult(intent, REQUEST_FILE_EXPLORER_CODE);
}
break;
case 1:
loadCloud();
break;
AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0: // Create new trait
showTraitDialog(null);
break;
case 1: // Local
DocumentFile traitDir = BaseDocumentTreeUtil.Companion.getDirectory(TraitEditorActivity.this, R.string.dir_trait);
if (traitDir != null && traitDir.exists()) {
Intent intent = new Intent();
intent.setClassName(TraitEditorActivity.this, FileExploreActivity.class.getName());
intent.putExtra("path", traitDir.getUri().toString());
intent.putExtra("include", new String[]{"trt"});
intent.putExtra("title", getString(R.string.traits_dialog_import));
startActivityForResult(intent, REQUEST_FILE_EXPLORER_CODE);
}
break;
case 2: // Cloud
loadCloud();
break;
case 3: // BrAPI
startBrapiTraitActivity(false);
break;
}
}
importDialog.dismiss();
});
};

ListAddDialog dialog = new ListAddDialog(
this,
getString(R.string.traits_new_dialog_title),
importArray,
icons,
onItemClickListener
);
dialog.show(getSupportFragmentManager(), "ListAddDialog");
}

public void startBrapiTraitActivity(boolean fromTraitCreator) {
Expand Down Expand Up @@ -989,6 +957,9 @@ private void copyTrait(TraitObject trait) {

@Override
public void onNewTraitDialogDismiss() {
if (!brapiDialogShown) {
brapiDialogShown = displayBrapiInfo(TraitEditorActivity.this, null, true);
}
queryAndLoadTraits();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@
public class ListAddDialog extends DialogFragment {

private Activity activity;
private int dialogTitle;
private String title;
private String[] items;
private int[] icons;
private AdapterView.OnItemClickListener onItemClickListener;

public ListAddDialog(Activity activity, int dialogTitle, String[] items, int[] icons, AdapterView.OnItemClickListener onItemClickListener) {
public ListAddDialog(Activity activity, String title, String[] items, int[] icons, AdapterView.OnItemClickListener onItemClickListener) {
this.activity = activity;
this.dialogTitle = dialogTitle;
this.title = title;
this.items = items;
this.icons = icons;
this.onItemClickListener = onItemClickListener;
Expand All @@ -50,7 +50,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
listView.setAdapter(adapter);

AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.AppAlertDialog);
builder.setTitle(dialogTitle)
builder.setTitle(title)
.setCancelable(true)
.setView(layout)
.setPositiveButton(getString(R.string.dialog_cancel), new DialogInterface.OnClickListener() {
Expand Down
51 changes: 2 additions & 49 deletions app/src/main/java/com/fieldbook/tracker/dialogs/NewTraitDialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,6 @@ class NewTraitDialog(
private var originalInitialTraitObject: TraitObject? = null

//private var createVisible: Boolean
private var brapiDialogShown = false

init {
(activity as? TraitEditorActivity)?.brAPIDialogShown?.let {
setBrAPIDialogShown(it)
}
}

fun setTraitObject(traitObject: TraitObject?) {

Expand Down Expand Up @@ -302,9 +295,7 @@ class NewTraitDialog(

traitFormatsRv.adapter = formatsAdapter

if (isSelectingFormat) { //remove brapi format
formatsAdapter.submitList(formats.filter { it != Formats.BRAPI })
} else formatsAdapter.submitList(formats)
formatsAdapter.submitList(formats)
}
}

Expand Down Expand Up @@ -381,18 +372,6 @@ class NewTraitDialog(
ed.putBoolean(GeneralKeys.TRAITS_EXPORTED, false)
ed.apply()

// Display our BrAPI dialog if it has not been show already
// Get our dialog state from our adapter to see if a trait has been selected
(activity as? TraitEditorActivity)?.adapter?.infoDialogShown?.let {
setBrAPIDialogShown(it)

if (!brapiDialogShown) {
setBrAPIDialogShown(
activity.displayBrapiInfo(activity, null, true)
)
}
}

CollectActivity.reloadData = true

soundHelperImpl.playCelebrate()
Expand Down Expand Up @@ -517,15 +496,6 @@ class NewTraitDialog(
)
}

// when this value changes in this class,
// the value in TraitEditorActivity must change
private fun setBrAPIDialogShown(b: Boolean) {
if (!isSelectingFormat) {
brapiDialogShown = b
(activity as? TraitEditorActivity)?.brAPIDialogShown = b
}
}

private fun showFormatParameters() {

val adapter = traitFormatsRv.adapter as? TraitFormatAdapter
Expand All @@ -545,24 +515,7 @@ class NewTraitDialog(
private var isShowingCameraOptions = false
override fun onSelected(format: Formats) {

if (format == Formats.BRAPI) {

if (initialTraitObject != null) {

Toast.makeText(
context,
R.string.dialog_new_trait_error_cannot_update_to_brapi_trait,
Toast.LENGTH_SHORT
).show()

} else {

dismiss()

(activity as? TraitEditorActivity)?.startBrapiTraitActivity(true)
}

} else if (format == Formats.BASE_PHOTO && !isShowingCameraOptions) {
if (format == Formats.BASE_PHOTO && !isShowingCameraOptions) {

isShowingCameraOptions = true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ enum class Formats(val type: Types = Types.SYSTEM, val isCamera: Boolean = false
//CUSTOM formats
DISEASE_RATING(Types.CUSTOM), GNSS(Types.CUSTOM),
BASE_PHOTO(Types.CUSTOM), USB_CAMERA(Types.CUSTOM, isCamera = true), GO_PRO(Types.CUSTOM, isCamera = true), CANON(Types.CUSTOM, isCamera = true),
LABEL_PRINT(Types.CUSTOM), BRAPI(Types.CUSTOM);
LABEL_PRINT(Types.CUSTOM);

companion object {
fun isCameraTrait(format: String) = format in setOf("photo", "usb camera", "gopro", "canon")
Expand Down Expand Up @@ -45,7 +45,6 @@ enum class Formats(val type: Types = Types.SYSTEM, val isCamera: Boolean = false
PERCENT -> PercentFormat()
DISEASE_RATING -> DiseaseRatingFormat()
LABEL_PRINT -> ZebraLabelPrintFormat()
BRAPI -> BrapiFormat()
else -> TextFormat()
}

Expand Down
1 change: 0 additions & 1 deletion app/src/main/res/drawable/ic_file_generic.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#343434"
android:viewportWidth="24"
android:viewportHeight="24">
<path
Expand Down
1 change: 0 additions & 1 deletion app/src/main/res/drawable/ic_trait_labelprint.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#343434"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/res/menu/menu_traits.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
android:showAsAction="ifRoom"
android:title="@string/traits_toolbar_delete_all" />
<item
android:id="@+id/importexport"
android:icon="@drawable/ic_tb_import_export"
android:id="@+id/export"
android:icon="@drawable/ic_file_export_outline"
android:showAsAction="ifRoom"
android:title="@string/traits_toolbar_import_export" />
android:title="@string/traits_dialog_export" />
</menu>

3 changes: 2 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,8 @@
<string name="warning_traits_missing_modify">Create traits before modifying them.</string>

<!-- Trait import/export -->
<string name="traits_toolbar_import_export">Import/Export</string>
<string name="traits_new_dialog_title">New Trait(s)</string>
<string name="traits_dialog_create">Create new trait</string>
<string name="traits_dialog_import">Import</string>
<string name="traits_export_check">Export current trait list?</string>
<string name="traits_dialog_export">Export</string>
Expand Down