diff --git a/app/src/main/java/com/fieldbook/tracker/ConfigActivity.java b/app/src/main/java/com/fieldbook/tracker/ConfigActivity.java index 80d817708..fc81ce95b 100644 --- a/app/src/main/java/com/fieldbook/tracker/ConfigActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/ConfigActivity.java @@ -546,7 +546,7 @@ public void onClick(DialogInterface dialog, int which) { } // Only used for truncating lat long values - private String truncateDecimalString(String v) { + public String truncateDecimalString(String v) { int count = 0; boolean found = false; diff --git a/app/src/main/java/com/fieldbook/tracker/DataHelper.java b/app/src/main/java/com/fieldbook/tracker/DataHelper.java index 9b315d22d..33dada1cc 100644 --- a/app/src/main/java/com/fieldbook/tracker/DataHelper.java +++ b/app/src/main/java/com/fieldbook/tracker/DataHelper.java @@ -286,12 +286,12 @@ public Cursor convertDatabaseToTable(String[] col, String[] traits) { for (int i = 0; i < traits.length; i++) { traitArgs[i] = "m" + i + ".userValue as '" + traits[i] + "'"; - joinArgs = joinArgs + "LEFT JOIN user_traits m" + i + " ON range." + TICK +ep.getString("ImportUniqueName", "") - +TICK + " = m" + i + ".rid AND m" + i + ".parent = '" + traits[i] + "' "; + joinArgs = joinArgs + "LEFT JOIN user_traits m" + i + " ON range." + TICK + ep.getString("ImportUniqueName", "") + + TICK + " = m" + i + ".rid AND m" + i + ".parent = '" + traits[i] + "' "; } query = "SELECT " + convertToCommaDelimited(rangeArgs) + " , " + convertToCommaDelimited(traitArgs) + - " FROM range range " + joinArgs + "GROUP BY range." +TICK + ep.getString("ImportUniqueName", "")+TICK; + " FROM range range " + joinArgs + "GROUP BY range." + TICK + ep.getString("ImportUniqueName", "") + TICK + "ORDER BY range.id"; Log.i("DH", query); diff --git a/app/src/main/java/com/fieldbook/tracker/MainActivity.java b/app/src/main/java/com/fieldbook/tracker/MainActivity.java index c4b2c0cfe..e02d4ab1f 100644 --- a/app/src/main/java/com/fieldbook/tracker/MainActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/MainActivity.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.graphics.PorterDuff; +import android.provider.Settings; import android.support.v7.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -59,6 +60,7 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Gallery; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; @@ -213,8 +215,8 @@ public class MainActivity extends AppCompatActivity implements OnClickListener { private MediaRecorder mRecorder; private MediaPlayer mPlayer; private File mRecordingLocation; - private Button doRecord; - private Button clearRecord; + private ImageButton doRecord; + private ImageButton clearRecord; private boolean mRecording; private boolean mListening = false; @@ -232,7 +234,8 @@ public class MainActivity extends AppCompatActivity implements OnClickListener { private TextView counterTv; - Button rust0, rust5, rust10, rust15, rust20, rust25, rust30, rust35, rust40, rust45, rust50, rust55, rust60, rust65, rust70, rust75, rust80, rust85, rust90, rust95, rust100, rustR, rustM, rustS, rustDelim, rustClear; + Button rust0, rust5, rust10, rust15, rust20, rust25, rust30, rust35, rust40, rust45, rust50, rust55, rust60, rust65, rust70, rust75, rust80, rust85, rust90, rust95, rust100, rustR, rustM, rustS, rustDelim; + ImageButton rustClear; final Button buttonArray[] = new Button[12]; @@ -263,6 +266,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener { LinearLayout traitAudio; LinearLayout traitDiseaseRating; LinearLayout traitMulticat; + LinearLayout traitLocation; /** * Test area @@ -405,6 +409,7 @@ private void loadScreen() { traitCounter = (LinearLayout) findViewById(R.id.counterLayout); traitDiseaseRating = (LinearLayout) findViewById(R.id.diseaseLayout); traitMulticat = (LinearLayout) findViewById(R.id.multicatLayout); + traitLocation = (LinearLayout) findViewById(R.id.locationLayout); traitType = (Spinner) findViewById(R.id.traitType); newTraits = new HashMap(); @@ -468,16 +473,16 @@ public void onClick(View v) { pNum = (EditText) findViewById(R.id.pNum); // Clear button for most traits - doRecord = (Button) traitAudio.findViewById(R.id.record); + doRecord = (ImageButton) traitAudio.findViewById(R.id.record); doRecord.setOnClickListener(this); - clearRecord = (Button) traitAudio.findViewById(R.id.clearRecord); + clearRecord = (ImageButton) traitAudio.findViewById(R.id.clearRecord); clearRecord.setOnClickListener(this); - Button capture = (Button) traitPhoto.findViewById(R.id.capture); + ImageButton capture = (ImageButton) traitPhoto.findViewById(R.id.capture); capture.setOnClickListener(this); - Button captureClear = (Button) traitPhoto.findViewById(R.id.clearPhoto); + ImageButton captureClear = (ImageButton) traitPhoto.findViewById(R.id.clearPhoto); captureClear.setOnClickListener(this); photo = (Gallery) traitPhoto.findViewById(R.id.photo); @@ -582,7 +587,7 @@ public void onTextChanged(CharSequence arg0, int arg1, int arg2, // Progress bar seekBar = (SeekBar) traitPercent.findViewById(R.id.seekbar); - Button clearPercent = (Button) traitPercent.findViewById(R.id.clearPercent); + ImageButton clearPercent = (ImageButton) traitPercent.findViewById(R.id.clearPercent); seekBar.setMax(100); seekListener = new OnSeekBarChangeListener() { @@ -621,24 +626,27 @@ public boolean onTouch(View arg0, MotionEvent arg1) { rangeName = (TextView) findViewById(R.id.rangeName); plotName = (TextView) findViewById(R.id.plotName); + ImageButton getLocation = (ImageButton) traitLocation.findViewById(R.id.getLocationBtn); + ImageButton clearLocation = (ImageButton) traitLocation.findViewById(R.id.clearLocationBtn); + Button addDayBtn = (Button) traitDate.findViewById(R.id.addDateBtn); Button minusDayBtn = (Button) traitDate.findViewById(R.id.minusDateBtn); - Button saveDayBtn = (Button) traitDate.findViewById(R.id.enterBtn); - Button clearDate = (Button) traitDate.findViewById(R.id.clearDateBtn); + ImageButton saveDayBtn = (ImageButton) traitDate.findViewById(R.id.enterBtn); + ImageButton clearDate = (ImageButton) traitDate.findViewById(R.id.clearDateBtn); Button addCounterBtn = (Button) traitCounter.findViewById(R.id.addBtn); Button minusCounterBtn = (Button) traitCounter.findViewById(R.id.minusBtn); - Button clearCounterBtn = (Button) traitCounter.findViewById(R.id.clearCounterBtn); + ImageButton clearCounterBtn = (ImageButton) traitCounter.findViewById(R.id.clearCounterBtn); counterTv = (TextView) traitCounter.findViewById(R.id.curCount); // Multicat - Button clearMultiCat = (Button) traitMulticat.findViewById(R.id.clearMultiCatBtn); + ImageButton clearMultiCat = (ImageButton) traitMulticat.findViewById(R.id.clearMultiCatBtn); gridMultiCat = (ExpandableHeightGridView) traitMulticat.findViewById(R.id.catGrid); gridMultiCat.setExpanded(true); buttonsCreated = false; //Button clearBtn = (Button) findViewById(R.id.clearBtn); - Button clearCat = (Button) traitCategorical.findViewById(R.id.clearCatBtn); + ImageButton clearCat = (ImageButton) traitCategorical.findViewById(R.id.clearCatBtn); Button k1 = (Button) traitNumeric.findViewById(R.id.k1); Button k2 = (Button) traitNumeric.findViewById(R.id.k2); @@ -710,7 +718,7 @@ public boolean onLongClick(View v) { rustM=(Button) traitDiseaseRating.findViewById(R.id.rustM); rustS=(Button) traitDiseaseRating.findViewById(R.id.rustS); rustDelim = (Button) traitDiseaseRating.findViewById(R.id.rustDelim); - rustClear = (Button) traitDiseaseRating.findViewById(R.id.clearRustBtn); + rustClear = (ImageButton) traitDiseaseRating.findViewById(R.id.clearRustBtn); Button[] rustBtnArray = new Button[]{rust0,rust5,rust10,rust15,rust20,rust25,rust30,rust35,rust40,rust45,rust50,rust55,rust60,rust65,rust70,rust75,rust80,rust85,rust90,rust95,rust100}; List temps = new ArrayList(); @@ -757,8 +765,11 @@ public boolean onLongClick(View v) { rustDelim.setOnClickListener(this); rustClear.setOnClickListener(this); - rangeName.setText(ep.getString("ImportFirstName", getString(R.string.range)) + ":"); - plotName.setText(ep.getString("ImportSecondName", getString(R.string.plot)) + ":"); + String primaryName = ep.getString("ImportFirstName", getString(R.string.range)) + ":"; + String secondaryName = ep.getString("ImportSecondName", getString(R.string.plot)) + ":"; + + rangeName.setText(primaryName); + plotName.setText(secondaryName); clearPercent.setOnClickListener(new OnClickListener() { @Override @@ -885,6 +896,38 @@ public void onClick(View arg0) { } }); + // Get Location + getLocation.setOnClickListener(new OnClickListener() { + public void onClick(View arg0) { + GPSTracker gps = new GPSTracker(thisActivity); + String fullLocation = ""; + double lat; + double lng; + + if (gps.canGetLocation()) { //GPS enabled + lat = gps.getLatitude(); // returns latitude + lng = gps.getLongitude(); // returns longitude + fullLocation = truncateDecimalString(String.valueOf(lat)) + "; " + truncateDecimalString(String.valueOf(lng)); + } else { + Intent intent = new Intent( + Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(intent); + } + eNum.setText(fullLocation); + updateTrait(currentTrait.trait, "location", fullLocation); + } + }); + + // Clear location + clearLocation.setOnClickListener(new OnClickListener() { + public void onClick(View arg0) { + eNum.removeTextChangedListener(eNumUpdate); + eNum.setText(""); + removeTrait(currentTrait.trait); + eNum.addTextChangedListener(eNumUpdate); + } + }); + // Add counter addCounterBtn.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { @@ -1062,7 +1105,7 @@ public void onClick(View arg0) { }); eImg = (ImageView) traitBoolean.findViewById(R.id.eImg); - Button clearBoolean = (Button) traitBoolean.findViewById(R.id.clearBoolean); + ImageButton clearBoolean = (ImageButton) traitBoolean.findViewById(R.id.clearBoolean); // Boolean eImg.setOnClickListener(new OnClickListener() { @@ -2071,6 +2114,11 @@ public void onItemSelected(AdapterView arg0, View arg1, } } + //Save default if it exists + if (currentTrait.defaultValue != null && currentTrait.defaultValue.length() > 0) { + updateTrait(currentTrait.trait, currentTrait.format, currentTrait.defaultValue); + } + // All the logic is here // What it does is hide all other controls except the // current displayed trait @@ -2089,6 +2137,7 @@ public void onItemSelected(AdapterView arg0, View arg1, traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.VISIBLE); tNum.setSelection(tNum.getText().length()); @@ -2122,7 +2171,6 @@ public void onItemSelected(AdapterView arg0, View arg1, tNum.addTextChangedListener(tNumUpdate); tNum.setSelection(tNum.getText().length()); - } // This is needed to fix the keyboard bug @@ -2151,6 +2199,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.GONE); tNum.setEnabled(false); @@ -2207,6 +2256,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.GONE); tNum.setEnabled(false); @@ -2289,6 +2339,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setEnabled(false); tNum.setVisibility(View.GONE); @@ -2363,6 +2414,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.GONE); tNum.setEnabled(false); @@ -2416,6 +2468,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.GONE); tNum.setEnabled(false); @@ -2453,6 +2506,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.removeTextChangedListener(tNumUpdate); tNum.setVisibility(EditText.VISIBLE); @@ -2461,12 +2515,14 @@ public void run() { eNum.setVisibility(EditText.GONE); if (!newTraits.containsKey(currentTrait.trait)) { - doRecord.setText(getString(R.string.record)); + //doRecord.setText(getString(R.string.record)); + doRecord.setImageResource(R.drawable.ic_audio); tNum.setText(""); //tNum.setText(R.string.nodata); } else { mRecordingLocation = new File(newTraits.get(currentTrait.trait).toString()); - doRecord.setText(getString(R.string.play)); + //doRecord.setText(getString(R.string.play)); + doRecord.setImageResource(R.drawable.ic_play_arrow); tNum.setText(getString(R.string.stored)); } @@ -2482,6 +2538,7 @@ public void run() { traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.removeTextChangedListener(tNumUpdate); tNum.setVisibility(EditText.GONE); @@ -2539,6 +2596,7 @@ public void onItemClick(AdapterView arg0, traitCounter.setVisibility(View.VISIBLE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.removeTextChangedListener(tNumUpdate); tNum.setVisibility(EditText.GONE); @@ -2565,6 +2623,7 @@ public void onItemClick(AdapterView arg0, traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.VISIBLE); traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.removeTextChangedListener(tNumUpdate); tNum.setVisibility(EditText.GONE); @@ -2604,6 +2663,7 @@ public void onItemClick(AdapterView arg0, traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); traitMulticat.setVisibility(View.VISIBLE); + traitLocation.setVisibility(View.GONE); tNum.setVisibility(EditText.GONE); tNum.setEnabled(false); @@ -2675,6 +2735,47 @@ public void onGlobalLayout() { } }); + } else if(currentTrait.format.equals("location")) { + traitText.setVisibility(View.GONE); + traitNumeric.setVisibility(View.GONE); + traitPercent.setVisibility(View.GONE); + traitDate.setVisibility(View.GONE); + traitCategorical.setVisibility(View.GONE); + traitBoolean.setVisibility(View.GONE); + traitAudio.setVisibility(View.GONE); + traitPhoto.setVisibility(View.GONE); + traitCounter.setVisibility(View.GONE); + traitDiseaseRating.setVisibility(View.GONE); + traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.VISIBLE); + + tNum.setVisibility(EditText.GONE); + tNum.setEnabled(false); + + eNum.setVisibility(EditText.VISIBLE); + eNum.setEnabled(true); + eNum.setCursorVisible(false); + + pNum.setVisibility(EditText.GONE); + + if (newTraits.containsKey(currentTrait.trait)) { + eNum.removeTextChangedListener(eNumUpdate); + eNum.setText(newTraits.get(currentTrait.trait).toString()); + eNum.setTextColor(Color.parseColor(displayColor)); + eNum.addTextChangedListener(eNumUpdate); + } else { + eNum.removeTextChangedListener(eNumUpdate); + + eNum.setText(""); + eNum.setTextColor(Color.BLACK); + + if (currentTrait.defaultValue != null + && currentTrait.defaultValue.length() > 0) + eNum.setText(currentTrait.defaultValue); + + eNum.addTextChangedListener(eNumUpdate); + } + } else { traitText.setVisibility(View.GONE); traitNumeric.setVisibility(View.GONE); @@ -2686,6 +2787,8 @@ public void onGlobalLayout() { traitPhoto.setVisibility(View.GONE); traitCounter.setVisibility(View.GONE); traitDiseaseRating.setVisibility(View.GONE); + traitMulticat.setVisibility(View.GONE); + traitLocation.setVisibility(View.GONE); tNum.removeTextChangedListener(tNumUpdate); tNum.setVisibility(EditText.GONE); @@ -2769,7 +2872,8 @@ private void releaseRecorder() { private void beginPlayback() { mListening = true; - doRecord.setText(R.string.stop); + //doRecord.setText(R.string.stop); + doRecord.setImageResource(R.drawable.ic_stop); mPlayer = new MediaPlayer(); mPlayer = MediaPlayer.create(MainActivity.this, Uri.parse(mRecordingLocation.getAbsolutePath())); @@ -2786,7 +2890,9 @@ private void beginPlayback() mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mListening = false; - doRecord.setText(R.string.play); + //doRecord.setText(R.string.play); + doRecord.setImageResource(R.drawable.ic_play_arrow); + clearRecord.setEnabled(true); } }); @@ -3132,8 +3238,11 @@ public void onResume() { plot.setVisibility(EditText.GONE); } - rangeName.setText(ep.getString("ImportFirstName", getString(R.string.range)) + ":"); - plotName.setText(ep.getString("ImportSecondName", getString(R.string.plot)) + ":"); + String primaryName = ep.getString("ImportFirstName", getString(R.string.range)) + ":"; + String secondaryName = ep.getString("ImportSecondName", getString(R.string.plot)) + ":"; + + rangeName.setText(primaryName); + plotName.setText(secondaryName); paging = 1; @@ -3626,7 +3735,9 @@ public void onClick(View b) { if (mListening) { mPlayer.stop(); - doRecord.setText(R.string.play); + //doRecord.setText(R.string.play); + doRecord.setImageResource(R.drawable.ic_play_arrow); + mListening = false; clearRecord.setEnabled(true); break; @@ -3650,7 +3761,8 @@ public void onClick(View b) { tNum.setText(getString(R.string.stored)); mRecording = false; - doRecord.setText(R.string.play); + //doRecord.setText(R.string.play); + doRecord.setImageResource(R.drawable.ic_play_arrow); rangeLeft.setEnabled(true); rangeRight.setEnabled(true); @@ -3681,7 +3793,8 @@ public void onClick(View b) { mRecorder.start(); mRecording = true; - doRecord.setText(R.string.stop); + //doRecord.setText(R.string.stop); + doRecord.setImageResource(R.drawable.ic_stop); } break; @@ -3690,7 +3803,9 @@ public void onClick(View b) { removeTrait(currentTrait.trait); tNum.setText(""); mRecording = false; - doRecord.setText(R.string.record); + //doRecord.setText(R.string.record); + doRecord.setImageResource(R.drawable.ic_audio); + mListening = false; mRecording = false; break; @@ -4419,4 +4534,29 @@ public static boolean isGooglePlayInstalled(Context context) { } return app_installed; } + + public String truncateDecimalString(String v) { + int count = 0; + + boolean found = false; + + String truncated = ""; + + for (int i = 0; i < v.length(); i++) { + if (found) { + count += 1; + + if (count == 5) + break; + } + + if (v.charAt(i) == '.') { + found = true; + } + + truncated += v.charAt(i); + } + + return truncated; + } } \ No newline at end of file diff --git a/app/src/main/java/com/fieldbook/tracker/Search/SearchActivity.java b/app/src/main/java/com/fieldbook/tracker/Search/SearchActivity.java index 5c0e67e50..6fb0fd28a 100644 --- a/app/src/main/java/com/fieldbook/tracker/Search/SearchActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/Search/SearchActivity.java @@ -92,8 +92,6 @@ public void onClick(View arg0) { try { // Create the sql query based on user selection - //TODO add ticks - String sql1 = "select range.id, range." + TICK + ep.getString("ImportFirstName", "") + TICK + "," + " range." + TICK + ep.getString("ImportSecondName", "") + TICK + " from range where range.id is not null "; String sql2 = "select range.id, range." + TICK + ep.getString("ImportFirstName", "") + TICK + "," + "range." + TICK + ep.getString("ImportSecondName", "") + TICK + " from traits, range, user_traits where user_traits.rid = range." + TICK + ep.getString("ImportUniqueName", "") + TICK + " and user_traits.parent = traits.trait and user_traits.trait = traits.format "; diff --git a/app/src/main/java/com/fieldbook/tracker/Trait/TraitAdapter.java b/app/src/main/java/com/fieldbook/tracker/Trait/TraitAdapter.java index e85853e40..33fc2c07c 100644 --- a/app/src/main/java/com/fieldbook/tracker/Trait/TraitAdapter.java +++ b/app/src/main/java/com/fieldbook/tracker/Trait/TraitAdapter.java @@ -60,7 +60,7 @@ public long getItemId(int position) { private class ViewHolder { TextView name; - TextView format; + ImageView format; CheckBox visible; ImageView dragSort; ImageView menuPopup; @@ -77,7 +77,7 @@ public View getView(final int position, View convertView, final ViewGroup parent holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.text1); - holder.format = (TextView) convertView.findViewById(R.id.text2); + holder.format = (ImageView) convertView.findViewById(R.id.traitType); holder.visible = (CheckBox) convertView.findViewById(R.id.visible); holder.dragSort = (ImageView) convertView.findViewById(R.id.dragSort); holder.menuPopup = (ImageView) convertView.findViewById(R.id.popupMenu); @@ -90,7 +90,51 @@ public View getView(final int position, View convertView, final ViewGroup parent holder.id = getItem(position).id; holder.realPosition = getItem(position).realPosition; holder.name.setText(getItem(position).trait); - holder.format.setText(getItem(position).format); + + switch (getItem(position).format) { + case "numeric": + holder.format.setBackgroundResource(R.drawable.ic_numeric); + break; + case "categorical": + holder.format.setBackgroundResource(R.drawable.ic_categorical); + break; + case "date": + holder.format.setBackgroundResource(R.drawable.ic_today); + break; + case "percent": + holder.format.setBackgroundResource(R.drawable.ic_percent); + break; + case "boolean": + holder.format.setBackgroundResource(R.drawable.ic_cancel); + break; + case "text": + holder.format.setBackgroundResource(R.drawable.ic_text); + break; + case "photo": + holder.format.setBackgroundResource(R.drawable.ic_camera); + break; + case "audio": + holder.format.setBackgroundResource(R.drawable.ic_audio); + break; + case "counter": + holder.format.setBackgroundResource(R.drawable.ic_counter); + break; + case "disease rating": + holder.format.setBackgroundResource(R.drawable.ic_bug); + break; + case "rust rating": + holder.format.setBackgroundResource(R.drawable.ic_bug); + break; + case "multicat": + holder.format.setBackgroundResource(R.drawable.ic_multicat); + break; + case "location": + holder.format.setBackgroundResource(R.drawable.ic_location); + break; + default: + holder.format.setBackgroundResource(R.drawable.ic_reorder); + break; + } // Check or uncheck the list items if (visibility != null) { diff --git a/app/src/main/java/com/fieldbook/tracker/Trait/TraitEditorActivity.java b/app/src/main/java/com/fieldbook/tracker/Trait/TraitEditorActivity.java index 06b2477c5..cb0ea1575 100644 --- a/app/src/main/java/com/fieldbook/tracker/Trait/TraitEditorActivity.java +++ b/app/src/main/java/com/fieldbook/tracker/Trait/TraitEditorActivity.java @@ -295,8 +295,8 @@ public void onCreate(Bundle savedInstanceState) { thisActivity = this; - final String[] data = new String[11]; - final String[] enData = new String[11]; + final String[] data = new String[12]; + final String[] enData = new String[12]; data[0] = getString(R.string.numeric); data[1] = getString(R.string.qualitative); @@ -309,6 +309,7 @@ public void onCreate(Bundle savedInstanceState) { data[8] = getString(R.string.counter); data[9] = getString(R.string.rustrating); data[10] = getString(R.string.multicategorical); + data[11] = getString(R.string.location_trait); enData[0] = "Numeric"; enData[1] = "Categorical"; @@ -321,6 +322,7 @@ public void onCreate(Bundle savedInstanceState) { enData[8] = "Counter"; enData[9] = "Disease Rating"; enData[10] = "Multicat"; + enData[11] = "Location"; HashMap visibility = MainActivity.dt.getTraitVisibility(); traitList = (DragSortListView) findViewById(R.id.myList); @@ -585,6 +587,7 @@ public void onClick(View arg0) { Editor ed = ep.edit(); ed.putBoolean("CreateTraitFinished", true); + ed.putBoolean("TraitsExported", false); ed.apply(); loadData(); @@ -769,6 +772,13 @@ private void prepareFields(int position) { maxBox.setVisibility(View.GONE); categoryBox.setVisibility(View.VISIBLE); break; + case 11: //location + defBox.setVisibility(View.GONE); + minBox.setVisibility(View.GONE); + maxBox.setVisibility(View.GONE); + bool.setVisibility(View.GONE); + categoryBox.setVisibility(View.GONE); + break; } } @@ -919,7 +929,11 @@ private void importExportDialog() { public void onItemClick(AdapterView av, View arg1, int which, long arg3) { switch (which) { case 0: - showImportDialog(); + if(ep.getBoolean("TraitsExported",false)) { + showImportDialog(); + } else { + checkTraitExportDialog(); + } break; case 1: showExportDialog(); @@ -941,6 +955,38 @@ public void onClick(View arg0) { importExport.show(); } + private void checkTraitExportDialog() { + String[] allTraits = MainActivity.dt.getTraitColumnData("trait"); + + if (allTraits == null) { + makeToast(getString(R.string.createtraitserror)); + return; + } + + AlertDialog.Builder builder = new AlertDialog.Builder(TraitEditorActivity.this, R.style.AppAlertDialog); + builder.setMessage(getString(R.string.trait_export_check)); + + builder.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + showExportDialog(); + dialog.dismiss(); + } + + }); + + builder.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + showImportDialog(); + dialog.dismiss(); + } + + }); + + AlertDialog alert = builder.create(); + alert.show(); + } + private void sortDialog() { String[] allTraits = MainActivity.dt.getTraitColumnData("trait"); @@ -1088,6 +1134,9 @@ public void onClick(View v) { public void onClick(View arg0) { exportTable(exportFile.getText().toString()); + Editor ed = ep.edit(); + ed.putBoolean("TraitsExported", true); + ed.apply(); exportDialog.dismiss(); } }); diff --git a/app/src/main/res/drawable-hdpi/ic_audio.png b/app/src/main/res/drawable-hdpi/ic_audio.png new file mode 100644 index 000000000..2d4849231 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_audio.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_camera.png b/app/src/main/res/drawable-hdpi/ic_camera.png new file mode 100644 index 000000000..1841b6216 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_delete_forever.png b/app/src/main/res/drawable-hdpi/ic_delete_forever.png new file mode 100644 index 000000000..03dd5d778 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete_forever.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_save.png b/app/src/main/res/drawable-hdpi/ic_save.png new file mode 100644 index 000000000..b17d252d7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_save.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_audio.png b/app/src/main/res/drawable-mdpi/ic_audio.png new file mode 100644 index 000000000..8b5e58a34 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_audio.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_camera.png b/app/src/main/res/drawable-mdpi/ic_camera.png new file mode 100644 index 000000000..0f2934ac6 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_delete_forever.png b/app/src/main/res/drawable-mdpi/ic_delete_forever.png new file mode 100644 index 000000000..c2bd811d3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete_forever.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_save.png b/app/src/main/res/drawable-mdpi/ic_save.png new file mode 100644 index 000000000..e5b0ee6a4 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_save.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_audio.png b/app/src/main/res/drawable-xhdpi/ic_audio.png new file mode 100644 index 000000000..0b1c04fba Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_audio.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_camera.png b/app/src/main/res/drawable-xhdpi/ic_camera.png new file mode 100644 index 000000000..3d949c928 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_forever.png b/app/src/main/res/drawable-xhdpi/ic_delete_forever.png new file mode 100644 index 000000000..1e2229ee3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete_forever.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_save.png b/app/src/main/res/drawable-xhdpi/ic_save.png new file mode 100644 index 000000000..309ec23be Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_save.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_audio.png b/app/src/main/res/drawable-xxhdpi/ic_audio.png new file mode 100644 index 000000000..6cc287985 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_audio.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_camera.png b/app/src/main/res/drawable-xxhdpi/ic_camera.png new file mode 100644 index 000000000..7af0c4132 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_forever.png b/app/src/main/res/drawable-xxhdpi/ic_delete_forever.png new file mode 100644 index 000000000..0d14aaff9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete_forever.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_save.png b/app/src/main/res/drawable-xxhdpi/ic_save.png new file mode 100644 index 000000000..a024316d7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_save.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_audio.png b/app/src/main/res/drawable-xxxhdpi/ic_audio.png new file mode 100644 index 000000000..5702f3dd6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_audio.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_camera.png b/app/src/main/res/drawable-xxxhdpi/ic_camera.png new file mode 100644 index 000000000..d6ca3e5ee Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_camera.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete_forever.png b/app/src/main/res/drawable-xxxhdpi/ic_delete_forever.png new file mode 100644 index 000000000..3c3687be6 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_delete_forever.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_save.png b/app/src/main/res/drawable-xxxhdpi/ic_save.png new file mode 100644 index 000000000..3be556e78 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_save.png differ diff --git a/app/src/main/res/layout-sw600dp/main.xml b/app/src/main/res/layout-sw600dp/main.xml index edfa91e57..9dacbbba4 100644 --- a/app/src/main/res/layout-sw600dp/main.xml +++ b/app/src/main/res/layout-sw600dp/main.xml @@ -236,6 +236,7 @@ android:gravity="right" android:paddingRight="10dp" android:text="@string/range" + android:maxLength="10" android:textColor="@color/s_text" android:textSize="@dimen/text_size_xlarge" android:textStyle="bold" /> @@ -259,6 +260,7 @@ android:layout_height="wrap_content" android:gravity="center" android:padding="0dp" + android:maxLength="10" android:singleLine="true" android:text="" android:textColor="#000000" @@ -440,6 +442,11 @@ layout="@layout/trait_multicat" android:layout_width="fill_parent" android:layout_height="wrap_content" /> + + diff --git a/app/src/main/res/layout-sw600dp/trait_audio.xml b/app/src/main/res/layout-sw600dp/trait_audio.xml index 4aaf09fb0..baefddd6b 100644 --- a/app/src/main/res/layout-sw600dp/trait_audio.xml +++ b/app/src/main/res/layout-sw600dp/trait_audio.xml @@ -6,28 +6,31 @@ android:orientation="vertical" android:visibility="gone"> -