diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..92debf0
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 1431050..5b230c0 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -5,16 +5,15 @@
diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index e95a1e2..9117ac2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,14 +9,13 @@ android {
storePassword 'locustg@h0km'
}
}
- compileSdkVersion 33
+
defaultConfig {
applicationId "kz.istt.locust"
minSdkVersion 15
+ versionCode 100
+ versionName "2.4.4"
targetSdkVersion 33
- versionCode 99
- versionName "2.4.3"
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -34,13 +33,13 @@ android {
}
}
- buildToolsVersion '30.0.3'
-
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
namespace 'kz.istt.locust'
+ compileSdk 33
+ buildToolsVersion '34.0.0'
}
dependencies {
@@ -57,23 +56,4 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
-/*
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.2'
- implementation 'com.google.android.gms:play-services-maps:17.0.0'
- implementation 'androidx.appcompat:appcompat:1.0.2'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-*/
-
- /*compile files('libs/commons-codec-1.6.jar')
- compile files('libs/commons-logging-1.1.1.jar')
-
- compile files('libs/fluent-hc-4.5.2.jar')
- compile files('libs/httpclient-4.5.2.jar')
- compile files('libs/httpclient-cache-4.5.2.jar')
- compile files('libs/httpcore-4.4.4.jar')
- compile files('libs/httpmime-4.5.2.jar')*/
}
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
index 6d392ee..5471b1f 100644
Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
index 272c17c..90d0cd3 100644
--- a/app/release/output-metadata.json
+++ b/app/release/output-metadata.json
@@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
- "versionCode": 99,
- "versionName": "2.4.3",
+ "versionCode": 100,
+ "versionName": "2.4.4",
"outputFile": "app-release.apk"
}
],
diff --git a/app/src/main/java/kz/istt/locust/DbOpenHelper.java b/app/src/main/java/kz/istt/locust/DbOpenHelper.java
index c406810..729e88c 100644
--- a/app/src/main/java/kz/istt/locust/DbOpenHelper.java
+++ b/app/src/main/java/kz/istt/locust/DbOpenHelper.java
@@ -615,7 +615,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
"insecticide_dose float," + //норма расхода(л/га)
"insecticide_rate float," + //расход рабочей жидкости(л/га)
"insecticide_used_volume float," + //Общий объем использованной рабочей жидкости (л)
- "insecticide_number_spores float," + //Концентрация спор (/мл)
+ "insecticide_number_spores float," + //Концентрация спор (/мл) (--------- В 2024 ссказали удалить поэтому не используется ---------)
"insecticide_expiry_date integer," + //окончание срока действия (в нов. версии не используется)
"insecticide_mixed text," + //смешивается ли инсектицид с водой или растворителем? (в нов. версии не используется)
"insecticide_mixed_name text," + //если да, то с чем (в нов. версии не используется)
@@ -649,13 +649,13 @@ public class DbOpenHelper extends SQLiteOpenHelper
"spray_platform_g integer," + //2) «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
"spray_platform_h integer," + //3) «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».
- "spray_capacity_id integer," + //Поле “Вид опрыскивания” (Объём) «Полнообъемное», «Малообъемное», «Ультрамалообъемное».
+ "spray_capacity_id integer," + //Поле “Вид опрыскивания” (Объём) «Полнообъемное», «Малообъемное», «Ультрамалообъемное». (Сказали поле удалить удалил)
//"spray_operator text," + //Оператор (пилот, водитель, др...)
"spray_operatortype_id integer," + //Оператор (пилот, водитель, др...)
//"spray_operator_name text," + //�?мя оператора
- "spray_manufacturer_name text," + //Марка опрыскивателя
- "spray_model_name text," + //Модель опрыскивателя
+ "spray_manufacturer_name text," + //Марка опрыскивателя/модель
+ "spray_model_name text," + //Модель опрыскивателя (теперь не используется всё пишется в поле выше)
//"spray_date_calibration integer," + //Дата последней калибровки
"spray_height float," + //Высота над поверхностью почвы (м)
"spray_width float," + //Ширина захвата (м)
@@ -798,7 +798,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
"spray_platform_a integer," +
"spray_platform_g integer," +
"spray_platform_h integer," +
- "spray_capacity_id integer," +
+ "spray_capacity_id integer," + //Сказали удалить удалил
"spray_operatortype_id integer," +
"spray_manufacturer_name text," +
"spray_model_name text," +
diff --git a/app/src/main/java/kz/istt/locust/LocustDelActivity.java b/app/src/main/java/kz/istt/locust/LocustDelActivity.java
index c52cb70..c1a9d01 100644
--- a/app/src/main/java/kz/istt/locust/LocustDelActivity.java
+++ b/app/src/main/java/kz/istt/locust/LocustDelActivity.java
@@ -131,7 +131,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
public EditText edtInsRate = null; // расход рабочей жидкости(л/га)
public EditText edtInsUsedVolume = null; // Общий объем использованной рабочей жидкости (л)
- public EditText edtInsNumberSpores = null; // Концентрация спор (/мл)
// public DateInput edtInsExpiryDate = null; // окончание срока действия (дата)
// public SpinnerDB spiInsMixed = null; // смешивается ли инсектицид с водой или растворителем?
@@ -166,7 +165,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
public View spiSprPlatformA = null; // «Авиа» - выпадающий список:«Самолет», «Вертолет», «Дельтаплан».
public View spiSprPlatformG = null; // «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
public View spiSprPlatformH = null; // «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».
- public View spiSprCapacity = null; // Объём опрыскивателя
// public SpinnerDB spiSprOperator = null; // Оператор (пилот, водитель, др...)
// public EditText edtSprOperatorName = null; // �?мя оператора
@@ -180,7 +178,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
public EditText edtSprBarrierWidth = null; // ширина (м)
public EditText edtSprBarrierSpace = null; // промежуток (м)
public EditText edtSprSpeed = null; // Скорость движения (км/ч)
- public View spiSprGPS = null; // Антена: DGPS использовалась
public View spiSprMarking = null; // Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)
public CheckBox cbEffectiveness = null; // Галочка чтоб сделать поля не обязательными
@@ -199,7 +196,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
public EditText edtClothing = null; // Сборная колонка
- public View spiProtectiveClothingClean = null;
public View spiOperatorExposedInsecticide = null;
public EditText edtDescription = null;
public CheckBox cbTest; //Тестовая ли анкета
@@ -583,18 +579,8 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
guiTable.add(edtInsDose, "insecticide_dose");
edtInsRate = (EditText) findViewById(R.id.edtInsRate); // расход рабочей жидкости(л/га)
guiTable.add(edtInsRate, "insecticide_rate");
-
- /*
- * edtInsExpiryDate = (DateInput) findViewById(R.id.edtInsExpiryDate); // окончание срока годности (дата) guiTable.add(edtInsExpiryDate,"insecticide_expiry_date"); edtInsExpiryDate.setVisibleDMY("my"); //Кроме дня
- *
- * spiInsMixed = findViewById(R.id.spiInsMixed); // смешивается ли инсектицид с водой или растворителем? guiTable.add(spiInsMixed,"insecticide_mixed"); spiInsMixed.addField(this, "", ""); spiInsMixed.addField(this, getString(R.string.Yes),"1"); spiInsMixed.addField(this, getString(R.string.No),"0");
- *
- * edtInsMixedName = (EditText) findViewById(R.id.edtInsMixedName); guiTable.add(edtInsMixedName,"insecticide_mixed_name"); edtInsMixedRatio = (EditText) findViewById(R.id.edtInsMixedRatio); // если да, то в каком соотношении (%) guiTable.add(edtInsMixedRatio,"insecticide_mixed_ratio"); edtInsMixedRatio.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "100")});
- */
edtInsUsedVolume = (EditText) findViewById(R.id.edtInsUsedVolume); // Общий объем использованной рабочей жидкости (л)
guiTable.add(edtInsUsedVolume, "insecticide_used_volume");
- edtInsNumberSpores = (EditText) findViewById(R.id.edtInsNumberSpores); // Концентрация спор (/мл)
- guiTable.add(edtInsNumberSpores, "insecticide_number_spores");
spiWeaTimeStart = findViewById(R.id.spiWeaTimeStart); // время начала
guiTable.add(spiWeaTimeStart, "weather_time_start");
@@ -874,25 +860,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
cursor.close();
dboh.close();
- spiSprCapacity = findViewById(R.id.spiSprCapacity);
- guiTable.add(spiSprCapacity, "spray_capacity_id");
- ((selectDB)spiSprCapacity).addField("", "");
- dboh = new DbOpenHelper(this);
- cursor = dboh
- .getReadableDatabase()
- .rawQuery(
- "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
- + Tools.getLang() + "' LIMIT 1),d.name) name from list_capacities d where d.del=0 order by d.sort,d.name", null);
- if (cursor.moveToFirst())
- {
- do
- {
- ((selectDB)spiSprCapacity).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
- } while (cursor.moveToNext());
- }
- cursor.close();
- dboh.close();
-
/*
* spiSprOperator = findViewById(R.id.spiSprOperator); // Оператор (пилот, водитель, др...) guiTable.add(spiSprOperator,"spray_operatortype_id"); spiSprOperator.addField(this, "", ""); dboh = new DbOpenHelper(this); cursor =
* dboh.getReadableDatabase().rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"+Tools.getLang()+"' LIMIT 1),d.name) name from list_operatorstypes d where d.del=0 order by d.sort,d.name", null); if (cursor.moveToFirst()) { do { spiSprOperator.addField(this, cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id"))); } while
@@ -903,8 +870,8 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
// guiTable.add(edtSprOperatorName,"spray_operator_name");
edtSprManufacturer = (EditText) findViewById(R.id.edtSprManufacturer); // Марка опрыскивателя
guiTable.add(edtSprManufacturer, "spray_manufacturer_name");
- edtSprModel = (EditText) findViewById(R.id.edtSprModel); // Модель опрыскивателя
- guiTable.add(edtSprModel, "spray_model_name");
+ //edtSprModel = (EditText) findViewById(R.id.edtSprModel); // Модель опрыскивателя
+ //guiTable.add(edtSprModel, "spray_model_name");
// edtDateCalibration = (DateInput) findViewById(R.id.edtDateCalibration); // Дата последней калибровки
// guiTable.add(edtDateCalibration,"spray_date_calibration");
@@ -929,12 +896,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
edtSprSpeed = (EditText) findViewById(R.id.edtSprSpeed); // Скорость движения (км/ч)
guiTable.add(edtSprSpeed, "spray_speed");
- spiSprGPS = findViewById(R.id.spiSprGPS); // Антена: DGPS использовалась
- guiTable.add(spiSprGPS, "spray_gps");
- ((selectDB)spiSprGPS).addField("", "");
- ((selectDB)spiSprGPS).addField(getString(R.string.Yes), "1");
- ((selectDB)spiSprGPS).addField(getString(R.string.No), "0");
-
spiSprMarking = findViewById(R.id.spiSprMarking); // Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)
guiTable.add(spiSprMarking, "spray_marking_id");
((selectDB)spiSprMarking).addField("", "");
@@ -1107,12 +1068,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
}
});
- spiProtectiveClothingClean = findViewById(R.id.spiProtectiveClothingClean);
- guiTable.add(spiProtectiveClothingClean, "safety_clothing_clean");
- ((selectDB)spiProtectiveClothingClean).addField("", "");
- ((selectDB)spiProtectiveClothingClean).addField(getString(R.string.Yes), "1");
- ((selectDB)spiProtectiveClothingClean).addField(getString(R.string.No), "0");
-
spiOperatorExposedInsecticide = findViewById(R.id.spiOperatorExposedInsecticide);
guiTable.add(spiOperatorExposedInsecticide, "safety_operator_health");
((selectDB)spiOperatorExposedInsecticide).addField("", "");
@@ -1640,12 +1595,9 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
if(spiSprPlatformA.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformA).updateAdapter(this);
if(spiSprPlatformG.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformG).updateAdapter(this);
if(spiSprPlatformH.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformH).updateAdapter(this);
- if(spiSprCapacity.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprCapacity).updateAdapter(this);
if(spiSprBarrier.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprBarrier).updateAdapter(this);
- if(spiSprGPS.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprGPS).updateAdapter(this);
if(spiSprMarking.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprMarking).updateAdapter(this);
if(spiEffMethod.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiEffMethod).updateAdapter(this);
- if(spiProtectiveClothingClean.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiProtectiveClothingClean).updateAdapter(this);
if(spiOperatorExposedInsecticide.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiOperatorExposedInsecticide).updateAdapter(this);
if(spiSafNonTarget.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafNonTarget).updateAdapter(this);
if(spiSafIncident.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafIncident).updateAdapter(this);
@@ -2176,6 +2128,12 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
}
if (!eFields && !isGONE(edtInsUsedVolume))
{
+ if(edtInsUsedVolume.getText().toString().equals(""))
+ {
+ scrollTo(edtInsUsedVolume);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Total_volume_of_working_solution_actually_applied_l) + "\"!";
+ eFields = true;
+ }else
if(checkMinMaxI(edtInsUsedVolume,1,450000)!="")
{
scrollTo(edtInsUsedVolume);
@@ -2183,15 +2141,6 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
eFields = true;
}
}
- if (!eFields && !isGONE(edtInsNumberSpores))
- {
- if(checkMinMaxI(edtInsNumberSpores,1f,1000000000)!="")
- {
- scrollTo(edtInsNumberSpores);
- atxt = checkMinMaxI(edtInsNumberSpores,1f,1000000000) + " \"" + getResources().getString(R.string.Number_of_spores_ml) + "\"!";
- eFields = true;
- }
- }
if (!eFields && !isGONE(spiWeaTimeStart) && ((selectDB)spiWeaTimeStart).getText().toString().equals(""))
{
scrollTo(spiWeaTimeStart);
@@ -2337,6 +2286,12 @@ public class LocustDelActivity extends FragmentActivity implements LocationListe
}
if (!eFields && !isGONE(edtSprBarrierSpace))
{
+ if(edtSprBarrierSpace.getText().toString().equals(""))
+ {
+ scrollTo(edtSprBarrierSpace);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Spacing_of_barriers_m) + "\"!";
+ eFields = true;
+ }else
if(checkMinMaxI(edtSprBarrierSpace,1,1000)!="")
{
scrollTo(edtSprBarrierSpace);
diff --git a/app/src/main/java/kz/istt/locust/LocustDelListActivity.java b/app/src/main/java/kz/istt/locust/LocustDelListActivity.java
index bcf0424..37af274 100644
--- a/app/src/main/java/kz/istt/locust/LocustDelListActivity.java
+++ b/app/src/main/java/kz/istt/locust/LocustDelListActivity.java
@@ -282,8 +282,7 @@ public class LocustDelListActivity extends AppCompatActivity
html += "
" + getString(R.string.Spray_platform_h) + " | ";
//html += "" + getString(R.string.Spray_operator) + " | ";
html += "" + getString(R.string.Name_of_operator) + " | ";
- html += "" + getString(R.string.Spray_manufacturer) + " | ";
- html += "" + getString(R.string.Model_sprayer) + " | ";
+ html += "" + getString(R.string.Spray_manufacturer_model) + " | ";
html += "" + getString(R.string.Date_of_last_calibration) + " | ";
html += "" + getString(R.string.Atomizer_height_above_ground_m) + " | ";
html += "" + getString(R.string.Coverage_width) + " | ";
diff --git a/app/src/main/java/kz/istt/locust/LocustHealthActivity.java b/app/src/main/java/kz/istt/locust/LocustHealthActivity.java
new file mode 100644
index 0000000..b133804
--- /dev/null
+++ b/app/src/main/java/kz/istt/locust/LocustHealthActivity.java
@@ -0,0 +1,2428 @@
+package kz.istt.locust;
+
+import android.Manifest;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.DatePickerDialog;
+import android.app.TimePickerDialog;
+import android.app.TimePickerDialog.OnTimeSetListener;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteStatement;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.provider.Settings.Secure;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.DatePicker;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.ScrollView;
+import android.widget.TimePicker;
+import android.widget.Toast;
+
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.FileProvider;
+import androidx.fragment.app.FragmentActivity;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.zip.CRC32;
+
+import dbfields.AutoCompleteTextViewDB;
+import dbfields.StringDB;
+import dbfields.fieldDB;
+import dbfields.selectDB;
+import tools.LatLonListener;
+
+public class LocustHealthActivity extends FragmentActivity implements LocationListener, LatLonListener
+{
+ private LocationManager _lm;
+ private ScrollView scrollView1 = null;
+
+ private double _lat = 0; // c GPS приёмника
+ private double _lon = 0; // c GPS приёмника
+
+ public String uid = null; // Unique identifier of the record
+ public Integer del = null;
+ public Long seq = null; // Дата Изменения записи секунд с 1970 года
+ public StringDB m_Filled = new StringDB("1"); // 1- все обяз. поля заполнены, 0 - не все обяз. поля заполнены
+ // public Long created = null; // Дата создания записи секунд с 1970 года
+ //public Integer user_id = null;
+
+ public String ImageName = null; // Название файла рисунка
+ public String tmp_ImageName = null; // Временное название файла
+
+ public EditText edtImage1 = null; // Фото
+ public EditText edtImage2 = null; // Фото
+ public EditText edtImage3 = null; // Фото
+ public View spiCountry = null; // страна
+ public View spiRegion = null; // Область
+ public EditText edtArea = null; // Район
+ public EditText edtDistrict = null; // Сельский округ
+ public EditText edtVillage = null; // Посёлка
+ public EditText edtTerrain = null; // Название местности либо урочища
+
+ public EditText edtObserver = null;
+
+ public EditText edtDate = null; // Дата (передаётся в секундах с 1970 года)
+ public EditText edtTimeZone = null;
+
+ public EditText edtLatCenter = null; // Широта
+ public EditText edtLonCenter = null; // Долгота
+ public ListView latlonList = null;
+
+ public EditText edtInfestedArea = null; // заселенная площадь(га)
+ public EditText edtTreatedArea = null; // обработанная площадь(га)
+ public View spiVegType = null; // Тип(дикая, культурная)
+ public EditText edtVegHeight = null; // Высота (м)
+ public View spiVegCover = null; // Растительный покров (Редкий, Ср., Густой)
+ public EditText edtVegCrop = null; // Перечисление культур
+ public View spiVegDamage = null; // Повреждения растительного покрова(%)
+ public EditText edtVegDamageArea = null; // Площадь повреждений (га)
+ public EditText edtInsName = null; // коммерческое название
+ public EditText edtInsActiveSubstance = null; // Наименование активного вещества отравы
+ public EditText edtInsConcentration = null; // концентрация(г д.в./л или%)
+ public View spiInsFormulation = null; // формуляция(УМО, КЭ, др.)
+ public EditText edtInsDose = null; // норма расхода(л/га)
+ public EditText edtInsRate = null; // расход рабочей жидкости(л/га)
+
+ public EditText edtInsUsedVolume = null; // Общий объем использованной рабочей жидкости (л)
+
+ // public DateInput edtInsExpiryDate = null; // окончание срока действия (дата)
+ // public SpinnerDB spiInsMixed = null; // смешивается ли инсектицид с водой или растворителем?
+ // public EditText edtInsMixedName = null; // Если да то с каким
+ // public EditText edtInsMixedRatio = null; // если да, то в каком соотношении (%)
+ public View spiWeaTimeStart = null; // время начала
+ public View spiWeaTimeEnd = null; // время окончания
+ public EditText edtWeaTemperatureStart = null; // Температура нач.(°C)
+ public EditText edtWeaTemperatureEnd = null; // Температура кон.(°C)
+ public EditText edtWeaHumidityStart = null; // отн. влажность воздуха нач.(%)
+ public EditText edtWeaHumidityEnd = null; // отн. влажность воздуха кон.(%)
+ public EditText edtWeaWindSpeedStart = null; // скорость ветра нач. (м/с)
+ public EditText edtWeaWindSpeedEnd = null; // скорость ветра кон. (м/с)
+
+ public View spiWindDirectionStart = null; // направление ветра нач.
+ public View spiWindDirectionEnd = null; // направление ветра кон.
+ public View spiSprayDirectionStart = null; // направление опрыскивания нач.
+ public View spiSprayDirectionEnd = null; // направление опрыскивания кон.
+
+ public View spiLocSpeciese = null; // вид: CIT, DMA, LMI, др.
+ public View spiLocHoppers = null; // Стадии личинок, возраста: Младшие Средние Старшие
+
+ public View spiImago = null; // Имаго (да, нет)
+
+ public EditText edtLocDensity = null; // плотность на м2
+ public View spiKuliguli = null; // Кулиги (да, нет)
+ public View spiSwarm = null; // Стаи (да, нет)
+ public View spiSparse = null; // Разреженные (да, нет)
+ public View spiLocustPhaseId = null; // Фара саранчи
+ public View spiSprPlatform = null; // Вид опрыскивания
+
+ public View spiSprPlatformA = null; // «Авиа» - выпадающий список:«Самолет», «Вертолет», «Дельтаплан».
+ public View spiSprPlatformG = null; // «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
+ public View spiSprPlatformH = null; // «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».
+
+ // public SpinnerDB spiSprOperator = null; // Оператор (пилот, водитель, др...)
+ // public EditText edtSprOperatorName = null; // �?мя оператора
+ public EditText edtSprManufacturer = null; // Марка опрыскивателя
+ //public EditText edtSprModel = null; // Модель опрыскивателя
+ // public DateInput edtDateCalibration = null; // Дата последней калибровки
+ public EditText edtSprHeight = null; // Высота над поверхностью почвы (м)
+ // public EditText edtSprWidth = null; // Ширина захвата (м)
+ // public EditText edtSprSpacing = null; // Расстояние между проходами опрыскивателя (м) (Надия Рашидовна сказала удалить)
+ public View spiSprBarrier = null; // Барьеры (да, нет)
+ public EditText edtSprBarrierWidth = null; // ширина (м)
+ public EditText edtSprBarrierSpace = null; // промежуток (м)
+ public EditText edtSprSpeed = null; // Скорость движения (км/ч)
+ public View spiSprMarking = null; // Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)
+
+ public CheckBox cbEffectiveness = null; // Галочка чтоб сделать поля не обязательными
+
+ public EditText edtEffMortality = null; // смертность саранчи(%)
+ public EditText edtEffTime = null; // Прошло времени после обработки в часах
+ public View spiEffMethod = null; // метод подсчета смертности
+
+ public CheckBox cbSafClothingGoggles = null; // Какой защитной одеждой пользовался оператор: Очки
+ public CheckBox cbSafClothingMasks = null; // Какой защитной одеждой пользовался оператор: Маска
+ public CheckBox cbSafClothingGloves = null; // Какой защитной одеждой пользовался оператор: Перчатки
+ public CheckBox cbSafClothingOveralls = null; // Какой защитной одеждой пользовался оператор: Комбинезон
+ public CheckBox cbSafClothingCaps = null; // Какой защитной одеждой пользовался оператор: Кепка
+ public CheckBox cbSafClothingBoots = null; // Какой защитной одеждой пользовался оператор: Сапоги
+ public CheckBox cbSafClothingAbsent = null; // Какой защитной одеждой пользовался оператор: Отсутствуют
+
+ public EditText edtClothing = null; // Сборная колонка
+
+ public View spiProtectiveClothingClean = null;
+ public View spiOperatorExposedInsecticide = null;
+ public EditText edtDescription = null;
+ public CheckBox cbTest; //Тестовая ли анкета
+
+ public CheckBox cbSafInformFarmer = null; // Кто был оповещен об обработках? Фермер
+ public CheckBox cbSafInformShepherd = null; // Кто был оповещен об обработках? Пастух
+ public CheckBox cbSafInformVillager = null; // Кто был оповещен об обработках? Сельский житель
+ public CheckBox cbSafInformOfficial = null; // Кто был оповещен об обработках? Чиновник
+ public CheckBox cbSafInformBeekeeper = null; // Кто был оповещен об обработках? Пчеловод
+ public CheckBox cbSafInformOther = null; // Кто был оповещен об обработках? Другие
+ public EditText edtInform = null; // Сборная колонка для (Фермер,Сельский житель,Чиновник,Пчеловод,Другие)
+
+ //public SpinnerDB spiSafEmptyСontainers = null; // Пустые контейнеры
+ public CheckBox cbTripleRinsed = null;
+ public CheckBox cbPunctured = null;
+ public CheckBox cbTakenBackToBase = null;
+ public CheckBox cbLeftInField = null;
+ public CheckBox cbBuried = null;
+ public CheckBox cbBurned = null;
+ public EditText edtSafEmptyContainers = null; //Для накопления значений выбора галочек пустых контейнеров
+
+
+ public View spiSafNonTarget = null; // воздействие на нецелевые организмы
+ public EditText edtSafNonTargetEffect = null; // если да, то какое
+ public View spiSafIncident = null;
+ public EditText edtSafIncidentEffect = null;
+
+ public EditText edtComments = null; // КОММЕНТАРИИ
+
+ public View btnOk = null;
+ public View btnCancel = null;
+ public View btnGetGPSCenter = null;
+ public View btnDelGPSCenter = null;
+ public View btnOnMap = null;
+
+ public View btnImage1 = null;
+ public View btnImage2 = null;
+ public View btnImage3 = null;
+ public View btnShowImage1 = null;
+ public View btnShowImage2 = null;
+ public View btnShowImage3 = null;
+ public View btnDelImage1 = null;
+ public View btnDelImage2 = null;
+ public View btnDelImage3 = null;
+
+ private Uri mImageUri = null;
+ private DBGUITable guiTable = null;
+
+
+ private boolean isInRange(double a, double b, double c)
+ {
+ return b > a ? c >= a && c <= b : c >= b && c <= a;
+ }
+
+ public String checkMinMaxI(EditText txt, double min, double max)
+ {
+ try{
+ double input = Double.parseDouble(txt.getText().toString());
+ if (isInRange(min, max, input))
+ return "";
+ else
+ return "MIN="+ Double.toString(min)+" MAX="+ Double.toString(max)+" !";
+ } catch (NumberFormatException nfe) { }
+ return "";
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_locust_del);
+
+ //Загрузка сохранёного языка
+ Tools.loadLocale(this);
+
+ DbOpenHelper dboh;
+ Cursor cursor;
+
+ Intent intent = getIntent();
+ uid = intent.getStringExtra("uid"); // Параметр для Активити
+
+ guiTable = new DBGUITable(this, "frmlocustdel");
+ guiTable.add(uid, "uid");
+
+ Integer user_id = null;
+ /*DbOpenHelper dboh = new DbOpenHelper(this);
+ SQLiteDatabase db = dboh.getReadableDatabase();
+ Cursor cursor = db.rawQuery("select id from _user where del=0;", null);
+ if (cursor.moveToFirst())
+ {
+ user_id = Integer.valueOf(cursor.getInt(cursor.getColumnIndex("id")));
+ }
+ cursor.close();
+ dboh.close();*/
+ guiTable.add(user_id, "user_id"); //Пользователя больше нет!!!
+ String device_id= Secure.getString(getContentResolver(), Secure.ANDROID_ID);
+ guiTable.add(device_id, "device_id"); //Идентификатор устройства
+
+ List list;
+ ArrayAdapter dataAdapter;
+
+ scrollView1 = (ScrollView) findViewById(R.id.scrollView1);
+
+ guiTable.add(m_Filled, "filled");
+
+ edtImage1 = (EditText) findViewById(R.id.edtImage1); // Фото
+ guiTable.add(edtImage1, "image_name1");
+ edtImage2 = (EditText) findViewById(R.id.edtImage2); // Фото
+ guiTable.add(edtImage2, "image_name2");
+ edtImage3 = (EditText) findViewById(R.id.edtImage3); // Фото
+ guiTable.add(edtImage3, "image_name3");
+
+ spiCountry = findViewById(R.id.spiCountry); // страна
+ guiTable.add(spiCountry, "country_id");
+ ((selectDB)spiCountry).addField("", "");
+ // Выбираем страны и заполняем поля
+ dboh = new DbOpenHelper(this);
+ cursor = dboh.getReadableDatabase().rawQuery("select id, name from countries where del=0 order by name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiCountry).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ // Чтоб при изменении страны обновлялся список регионов
+ ((selectDB)spiCountry).setOnChangeValueListener(new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ ((selectDB)spiRegion).clearFields();
+ ((selectDB)spiRegion).addField("", "");
+
+ if(((selectDB)spiCountry).getValue() != null && ((selectDB)spiCountry).getValue() != "")
+ {
+ DbOpenHelper dboh = new DbOpenHelper(LocustHealthActivity.this);
+ Cursor cursor = dboh.getReadableDatabase().rawQuery(
+ "select id, name from countriesregions where del=0 and country_id=" + ((selectDB)spiCountry).getValue() + " order by name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiRegion).addField(cursor.getString(cursor.getColumnIndex("name")),
+ cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+ }
+ }
+ });
+
+ spiRegion = findViewById(R.id.spiRegion); // Регион
+ guiTable.add(spiRegion, "region_id");
+
+ edtArea = (EditText) findViewById(R.id.edtArea); // Район
+ guiTable.add(edtArea, "area");
+ edtDistrict = (EditText) findViewById(R.id.edtDistrict);
+ guiTable.add(edtDistrict, "district");
+
+ edtVillage = (EditText) findViewById(R.id.edtVillage); // Название местности либо урочища
+ guiTable.add(edtVillage, "village");
+ edtTerrain = (EditText) findViewById(R.id.edtTerrain); // Название местности либо урочища
+ guiTable.add(edtTerrain, "terrain");
+
+ edtObserver = (EditText) findViewById(R.id.edtObserver);
+ guiTable.add(edtObserver, "observer");
+ edtDate = (EditText) findViewById(R.id.edtDate); // Должна быть уникальной
+ guiTable.add(edtDate, "date");
+
+ View btnGetDate = (View) findViewById(R.id.btnGetDate);
+ OnClickListener clk0 = new OnClickListener() {
+ public void onClick(View v)
+ {
+ DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
+ @Override
+ public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
+ {
+
+ //SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm");
+ //format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ //LocustDelActivity.this.edtDate.setText(format.format(curDateTime));
+
+ //Теперь выбираем время
+ OnTimeSetListener myDateListener = new OnTimeSetListener() {
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute)
+ {
+ long val = Long.parseLong(((fieldDB) LocustHealthActivity.this.edtDate).getValue());
+ val += (hourOfDay*60+minute)*60;
+ ((fieldDB) LocustHealthActivity.this.edtDate).setValue(String.valueOf(val));
+ }
+ };
+
+ if(((fieldDB) LocustHealthActivity.this.edtDate).getValue()!=null && !((fieldDB) LocustHealthActivity.this.edtDate).getValue().equals(""))
+ {
+ Date time = new Date(Long.parseLong(((fieldDB) LocustHealthActivity.this.edtDate).getValue())*1000);
+ Calendar myCal = new GregorianCalendar();
+ myCal.setTime(time);
+ int hour = myCal.get(Calendar.HOUR_OF_DAY);
+ int minute = myCal.get(Calendar.MINUTE);
+ TimePickerDialog tpd = new TimePickerDialog(LocustHealthActivity.this, R.style.AlertDialogTheme, myDateListener, hour, minute, true);
+ tpd.show();
+ }else
+ {
+ final Calendar myCal = Calendar.getInstance();
+ int hour = myCal.get(Calendar.HOUR_OF_DAY);
+ int minute = myCal.get(Calendar.MINUTE);
+ TimePickerDialog tpd = new TimePickerDialog(LocustHealthActivity.this, R.style.AlertDialogTheme, myDateListener, hour, minute, true);
+ tpd.show();
+ }
+
+ Date date = new Date(year-1900, monthOfYear, dayOfMonth);
+ ((fieldDB) LocustHealthActivity.this.edtDate).setValue(String.valueOf(date.getTime()/1000));
+
+
+ }
+ };
+
+ if(!LocustHealthActivity.this.edtDate.getText().toString().equals(""))
+ {
+ Date date=null;
+ SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm");
+ //format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ try {
+ date = format.parse(LocustHealthActivity.this.edtDate.getText().toString());
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ if(date!=null)
+ {
+ Calendar myCal = new GregorianCalendar();
+ myCal.setTime(date);
+ int day = myCal.get(Calendar.DAY_OF_MONTH);
+ int month = myCal.get(Calendar.MONTH);
+ int year = myCal.get(Calendar.YEAR);
+ DatePickerDialog dpd = new DatePickerDialog(LocustHealthActivity.this, R.style.AlertDialogTheme, myDateListener, year, month, day);
+ dpd.show();
+ }
+ }else
+ {
+ final Calendar c = Calendar.getInstance();
+ int year = c.get(Calendar.YEAR);
+ int month = c.get(Calendar.MONTH);
+ int day = c.get(Calendar.DAY_OF_MONTH);
+
+ DatePickerDialog dpd = new DatePickerDialog(LocustHealthActivity.this, R.style.AlertDialogTheme, myDateListener, year, month, day);
+ dpd.show();
+ }
+ }
+ };
+ btnGetDate.setOnClickListener(clk0);
+
+ edtTimeZone = (EditText) findViewById(R.id.edtTimeZone);
+ guiTable.add(edtTimeZone,"timezone");
+
+ edtLatCenter = (EditText) findViewById(R.id.edtLatCenter); // Широта
+ guiTable.add(edtLatCenter, "lat_center");
+ edtLonCenter = (EditText) findViewById(R.id.edtLonCenter); // Долгота
+ guiTable.add(edtLonCenter, "lon_center");
+
+ ArrayList latlon = new ArrayList();
+ if(latlon.size()==0){
+ latlon.add(new LatLon(0, 0));
+ }
+ latlonList = findViewById(R.id.latlonList);
+ LatLonAdapter adapter = new LatLonAdapter(this, R.layout.list_lat_lon, latlon, this, latlonList);
+ latlonList.setAdapter(adapter);
+ adapter.clc=new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Tools.setListViewHeightBasedOnItems(LocustHealthActivity.this.latlonList);
+ }
+ };
+
+ edtInfestedArea = (EditText) findViewById(R.id.edtInfestedArea); // заселенная площадь(га)
+ guiTable.add(edtInfestedArea, "infested_area");
+ edtTreatedArea = (EditText) findViewById(R.id.edtTreatedArea); // обработанная площадь(га)
+ guiTable.add(edtTreatedArea, "treated_area");
+
+ spiVegType = findViewById(R.id.spiVegType); // Тип(Дикая, Культурная)
+ guiTable.add(spiVegType, "vegetation_type_id");
+ ((selectDB)spiVegType).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_vegetation d where d.del=0 order by d.sort, d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiVegType).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ edtVegHeight = (EditText) findViewById(R.id.edtVegHeight); // Высота (м)
+ guiTable.add(edtVegHeight, "vegetation_height");
+
+ spiVegCover = findViewById(R.id.spiVegCover); // Густота растительного покрова(%)
+ guiTable.add(spiVegCover, "vegetation_cover_id");
+ ((selectDB)spiVegCover).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_cover d where d.del=0 order by d.sort, d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiVegCover).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ edtVegCrop = (EditText) findViewById(R.id.edtVegCrop); // Перечисление культур
+ guiTable.add(edtVegCrop, "vegetation_crop");
+
+ spiVegDamage = findViewById(R.id.spiVegDamage); // Повреждения растительного покрова(%)
+ guiTable.add(spiVegDamage, "vegetation_damage");
+ ((selectDB)spiVegDamage).addField("", "");
+ // Выбираем страны и заполняем поля
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_damage d where d.del=0 order by d.sort, d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiVegDamage).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ edtVegDamageArea = (EditText) findViewById(R.id.edtVegDamageArea); // Площядь повреждения
+ guiTable.add(edtVegDamageArea, "vegetation_damage_area");
+
+ edtInsName = (EditText) findViewById(R.id.edtInsName); // коммерческое название
+ guiTable.add(edtInsName, "insecticide_name");
+ edtInsActiveSubstance = (EditText) findViewById(R.id.edtInsActiveSubstance); // Наименование активного вещества отравы
+ guiTable.add(edtInsActiveSubstance, "insecticide_active_substance");
+ edtInsConcentration = (EditText) findViewById(R.id.edtInsConcentration); // концентрация(г д.в./л или%)
+ guiTable.add(edtInsConcentration, "insecticide_concentration");
+ //edtInsConcentration.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") }); потому что текст
+
+ spiInsFormulation = findViewById(R.id.spiInsFormulation); // формуляция(УМО, КЭ, др.)
+ guiTable.add(spiInsFormulation, "insecticide_formulation_id");
+ ((selectDB)spiInsFormulation).addField("", "");
+ // Выбираем страны и заполняем поля
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_formulation d where d.del=0 order by d.sort, d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiInsFormulation).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ edtInsDose = (EditText) findViewById(R.id.edtInsDose); // норма расхода(л/га)
+ guiTable.add(edtInsDose, "insecticide_dose");
+ edtInsRate = (EditText) findViewById(R.id.edtInsRate); // расход рабочей жидкости(л/га)
+ guiTable.add(edtInsRate, "insecticide_rate");
+ edtInsUsedVolume = (EditText) findViewById(R.id.edtInsUsedVolume); // Общий объем использованной рабочей жидкости (л)
+ guiTable.add(edtInsUsedVolume, "insecticide_used_volume");
+
+ spiWeaTimeStart = findViewById(R.id.spiWeaTimeStart); // время начала
+ guiTable.add(spiWeaTimeStart, "weather_time_start");
+ ((selectDB)spiWeaTimeStart).addField("", "");
+ for (int i = 0; i < 24; i++) {
+ ((selectDB) spiWeaTimeStart).addField(String.valueOf(i), String.valueOf(i)+".0");
+ }
+ spiWeaTimeEnd = findViewById(R.id.spiWeaTimeEnd); // время окончания
+ guiTable.add(spiWeaTimeEnd, "weather_time_end");
+ ((selectDB)spiWeaTimeEnd).addField("", "");
+ for (int i = 0; i < 24; i++) {
+ ((selectDB) spiWeaTimeEnd).addField(String.valueOf(i), String.valueOf(i)+".0");
+ }
+ edtWeaTemperatureStart = (EditText) findViewById(R.id.edtWeaTemperatureStart); // Температура нач.(°C)
+ guiTable.add(edtWeaTemperatureStart, "weather_temperature_start");
+ edtWeaTemperatureEnd = (EditText) findViewById(R.id.edtWeaTemperatureEnd); // Температура кон.(°C)
+ guiTable.add(edtWeaTemperatureEnd, "weather_temperature_end");
+ edtWeaHumidityStart = (EditText) findViewById(R.id.edtWeaHumidityStart); // отн. влажность воздуха нач.(%)
+ guiTable.add(edtWeaHumidityStart, "weather_humidity_start");
+ //edtWeaHumidityStart.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") });
+
+ edtWeaHumidityEnd = (EditText) findViewById(R.id.edtWeaHumidityEnd); // отн. влажность воздуха кон.(%)
+ guiTable.add(edtWeaHumidityEnd, "weather_humidity_end");
+ //edtWeaHumidityEnd.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") });
+
+ edtWeaWindSpeedStart = (EditText) findViewById(R.id.edtWeaWindSpeedStart); // скорость ветра нач. (м/с)
+ guiTable.add(edtWeaWindSpeedStart, "weather_wind_speed_start");
+ edtWeaWindSpeedEnd = (EditText) findViewById(R.id.edtWeaWindSpeedEnd); // скорость ветра кон. (м/с)
+ guiTable.add(edtWeaWindSpeedEnd, "weather_wind_speed_end");
+
+ spiWindDirectionStart = findViewById(R.id.spiWindDirectionStart); // направление ветра нач.
+ guiTable.add(spiWindDirectionStart, "weather_direction_start");
+ ((selectDB)spiWindDirectionStart).addField("", "");
+ dboh = new DbOpenHelper(this);
+
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 order by d.degree", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiWindDirectionStart).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiWindDirectionEnd = findViewById(R.id.spiWindDirectionEnd); // направление ветра кон.
+ guiTable.add(spiWindDirectionEnd, "weather_direction_end");
+ ((selectDB)spiWindDirectionEnd).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 order by d.degree", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiWindDirectionEnd).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprayDirectionStart = findViewById(R.id.spiSprayDirectionStart); // направление опрыскивания нач.
+ guiTable.add(spiSprayDirectionStart, "weather_spray_direction_start");
+ ((selectDB)spiSprayDirectionStart).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name, d.degree from list_directions d where d.del=0 and d.degree>=0 order by d.degree",
+ null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprayDirectionStart).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprayDirectionEnd = findViewById(R.id.spiSprayDirectionEnd); // направление опрыскивания кон.
+ guiTable.add(spiSprayDirectionEnd, "weather_spray_direction_end");
+ ((selectDB)spiSprayDirectionEnd).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 and d.degree>=0 order by d.degree",
+ null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprayDirectionEnd).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ // locuststypes
+ spiLocSpeciese = findViewById(R.id.spiLocSpeciese);
+ guiTable.add(spiLocSpeciese, "locust_type_id");
+ ((selectDB)spiLocSpeciese).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select lt.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = lt.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),lt.name) name from LocustsTypes lt where lt.del=0 order by lt.sort,lt.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiLocSpeciese).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiLocHoppers = findViewById(R.id.spiLocHoppers); // Стадии личинок
+ guiTable.add(spiLocHoppers, "locust_hoppers_id");
+ ((selectDB)spiLocHoppers).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select lt.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = lt.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),lt.name) name from list_age lt where lt.del=0 order by lt.sort,lt.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiLocHoppers).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ /*
+ * list = new ArrayList(); list.add(""); list.add(getString(R.string.Younger)); // Младшие list.add(getString(R.string.Middle)); // Средние list.add(getString(R.string.Senior)); // Старшие list.add(getString(R.string.Adult)); // Имаго
+ *
+ * dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spiLocHoppers.setAdapter(dataAdapter);
+ */
+
+ spiImago = findViewById(R.id.spiImago); // Стаи (да, нет)
+ guiTable.add(spiImago, "locust_imago");
+ ((selectDB)spiImago).addField("", "");
+ ((selectDB)spiImago).addField(getString(R.string.Have), "1");
+ ((selectDB)spiImago).addField(getString(R.string.No), "0");
+
+ edtLocDensity = (EditText) findViewById(R.id.edtLocDensity); // плотность на м2
+ guiTable.add(edtLocDensity, "locust_density");
+
+ spiKuliguli = findViewById(R.id.spiKuliguli); // Кулиги (да, нет)
+ guiTable.add(spiKuliguli, "locust_kuliguli");
+ ((selectDB)spiKuliguli).addField("", "");
+ ((selectDB)spiKuliguli).addField(getString(R.string.Have), "1");
+ ((selectDB)spiKuliguli).addField(getString(R.string.No), "0");
+
+ spiSwarm = findViewById(R.id.spiSwarm); // Стаи (да, нет)
+ guiTable.add(spiSwarm, "locust_swarm");
+ ((selectDB)spiSwarm).addField("", "");
+ ((selectDB)spiSwarm).addField(getString(R.string.Have), "1");
+ ((selectDB)spiSwarm).addField(getString(R.string.No), "0");
+
+ spiSparse = findViewById(R.id.spiSparse); // Разреженные (да, нет)
+ guiTable.add(spiSparse, "locust_sparse");
+ ((selectDB)spiSparse).addField("", "");
+ ((selectDB)spiSparse).addField(getString(R.string.Have), "1");
+ ((selectDB)spiSparse).addField(getString(R.string.No), "0");
+
+ spiLocustPhaseId = findViewById(R.id.spiLocustPhaseId);
+ guiTable.add(spiLocustPhaseId, "locust_phase_id");
+ ((selectDB)spiLocustPhaseId).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_phase d where d.del=0 order by d.sort,d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiLocustPhaseId).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprPlatform = findViewById(R.id.spiSprPlatform); // Вид опрыскивания
+ guiTable.add(spiSprPlatform, "spray_platform");
+ ((selectDB)spiSprPlatform).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from sprayers_types d where d.del=0 order by d.sort,d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprPlatform).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprPlatformA = findViewById(R.id.spiSprPlatformA); // «Авиа» - выпадающий список:«Самолет», «Вертолет», «Дельтаплан».
+ guiTable.add(spiSprPlatformA, "spray_platform_a");
+ ((selectDB)spiSprPlatformA).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=1 order by d.sort,d.name",
+ null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprPlatformA).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprPlatformG = findViewById(R.id.spiSprPlatformG); // «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
+ guiTable.add(spiSprPlatformG, "spray_platform_g");
+ ((selectDB)spiSprPlatformG).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=3 order by d.sort,d.name",
+ null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprPlatformG).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ spiSprPlatformH = findViewById(R.id.spiSprPlatformH); // «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».
+ guiTable.add(spiSprPlatformH, "spray_platform_h");
+ ((selectDB)spiSprPlatformH).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=5 order by d.sort,d.name",
+ null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprPlatformH).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ /*
+ * spiSprOperator = findViewById(R.id.spiSprOperator); // Оператор (пилот, водитель, др...) guiTable.add(spiSprOperator,"spray_operatortype_id"); spiSprOperator.addField(this, "", ""); dboh = new DbOpenHelper(this); cursor =
+ * dboh.getReadableDatabase().rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"+Tools.getLang()+"' LIMIT 1),d.name) name from list_operatorstypes d where d.del=0 order by d.sort,d.name", null); if (cursor.moveToFirst()) { do { spiSprOperator.addField(this, cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id"))); } while
+ * (cursor.moveToNext()); } cursor.close(); dboh.close();
+ */
+
+ // edtSprOperatorName = (EditText) findViewById(R.id.edtSprOperatorName); // Имя оператора
+ // guiTable.add(edtSprOperatorName,"spray_operator_name");
+ edtSprManufacturer = (EditText) findViewById(R.id.edtSprManufacturer); // Марка опрыскивателя/модель
+ guiTable.add(edtSprManufacturer, "spray_manufacturer_name");
+ //edtSprModel = (EditText) findViewById(R.id.edtSprModel); // Модель опрыскивателя
+ //guiTable.add(edtSprModel, "spray_model_name");
+
+ // edtDateCalibration = (DateInput) findViewById(R.id.edtDateCalibration); // Дата последней калибровки
+ // guiTable.add(edtDateCalibration,"spray_date_calibration");
+ // edtDateCalibration.setVisibleDMY("my"); //Кроме дня
+
+ edtSprHeight = (EditText) findViewById(R.id.edtSprHeight); // Высота над поверхностью почвы (м)
+ guiTable.add(edtSprHeight, "spray_height");
+ // edtSprWidth = (EditText) findViewById(R.id.edtSprWidth); // Ширина захвата (м)
+ // guiTable.add(edtSprWidth,"spray_width");
+ // edtSprSpacing = (EditText) findViewById(R.id.edtSprSpacing); // Расстояние между проходами опрыскивателя (м)
+ // guiTable.add(edtSprSpacing,"spray_spacing");
+ spiSprBarrier = findViewById(R.id.spiSprBarrier); // Барьеры (да, нет)
+ guiTable.add(spiSprBarrier, "spray_barrier");
+ ((selectDB)spiSprBarrier).addField("", "");
+ ((selectDB)spiSprBarrier).addField(getString(R.string.Yes), "1");
+ ((selectDB)spiSprBarrier).addField(getString(R.string.No), "0");
+ edtSprBarrierWidth = (EditText) findViewById(R.id.edtSprBarrierWidth); // ширина (м)
+ guiTable.add(edtSprBarrierWidth, "spray_barrier_width");
+ edtSprBarrierSpace = (EditText) findViewById(R.id.edtSprBarrierSpace); // промежуток (м)
+ guiTable.add(edtSprBarrierSpace, "spray_barrier_space");
+
+ edtSprSpeed = (EditText) findViewById(R.id.edtSprSpeed); // Скорость движения (км/ч)
+ guiTable.add(edtSprSpeed, "spray_speed");
+
+ spiSprMarking = findViewById(R.id.spiSprMarking); // Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)
+ guiTable.add(spiSprMarking, "spray_marking_id");
+ ((selectDB)spiSprMarking).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_markings d where d.del=0 order by d.sort,d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiSprMarking).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ cbEffectiveness = (CheckBox) findViewById(R.id.cbEffectiveness);
+ guiTable.add(cbEffectiveness, "efficiency");
+
+ OnClickListener oclCbBoxEggs = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ CheckBox cbx=(CheckBox)v;
+ if(!cbx.isChecked()) {
+ AlertDialog.Builder adb = new AlertDialog.Builder(LocustHealthActivity.this, R.style.AlertDialogTheme);
+ adb.setTitle(getString(R.string.Warning));
+ adb.setMessage(LocustHealthActivity.this.getResources().getString(R.string.Cancel_filling_section));
+ adb.setPositiveButton(LocustHealthActivity.this.getResources().getString(R.string.Yes), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ updateAlpha();
+ }
+ });
+ adb.setNegativeButton(LocustHealthActivity.this.getResources().getString(R.string.No), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ cbx.setChecked(true);
+ }
+ });
+ AlertDialog ad = adb.show();
+ ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
+ ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
+
+
+ }else{
+ updateAlpha();
+ }
+
+ }
+ };
+ cbEffectiveness.setOnClickListener(oclCbBoxEggs);
+
+
+ edtEffMortality = (EditText) findViewById(R.id.edtEffMortality); // смертность саранчи(%)
+ guiTable.add(edtEffMortality, "efficacy_mortality");
+ //edtEffMortality.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") });
+
+ edtEffTime = (EditText) findViewById(R.id.edtEffTime); // Прошло времени после обработки
+ guiTable.add(edtEffTime, "efficacy_passed_time");
+
+ spiEffMethod = findViewById(R.id.spiEffMethod); // метод подсчета смертности "Визуальный", "Учётная рамка".
+ guiTable.add(spiEffMethod, "efficacy_mortality_method");
+ ((selectDB)spiEffMethod).addField("", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_mortality d where d.del=0 order by d.sort,d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ ((selectDB)spiEffMethod).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ OnCheckedChangeListener cclsl = new OnCheckedChangeListener()
+ {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
+ {
+ String val = "";
+ if (LocustHealthActivity.this.cbSafClothingGoggles.isChecked())
+ val += '1';
+ if (LocustHealthActivity.this.cbSafClothingMasks.isChecked())
+ val += '2';
+ if (LocustHealthActivity.this.cbSafClothingGloves.isChecked())
+ val += '3';
+ if (LocustHealthActivity.this.cbSafClothingOveralls.isChecked())
+ val += '4';
+ if (LocustHealthActivity.this.cbSafClothingCaps.isChecked())
+ val += '5';
+ if (LocustHealthActivity.this.cbSafClothingBoots.isChecked())
+ val += '6';
+
+ if (LocustHealthActivity.this.cbSafClothingAbsent.isChecked())
+ {
+ val = "7";
+ LocustHealthActivity.this.cbSafClothingGoggles.setEnabled(false);
+ LocustHealthActivity.this.cbSafClothingMasks.setEnabled(false);
+ LocustHealthActivity.this.cbSafClothingGloves.setEnabled(false);
+ LocustHealthActivity.this.cbSafClothingOveralls.setEnabled(false);
+ LocustHealthActivity.this.cbSafClothingCaps.setEnabled(false);
+ LocustHealthActivity.this.cbSafClothingBoots.setEnabled(false);
+ } else
+ {
+ LocustHealthActivity.this.cbSafClothingGoggles.setEnabled(true);
+ LocustHealthActivity.this.cbSafClothingMasks.setEnabled(true);
+ LocustHealthActivity.this.cbSafClothingGloves.setEnabled(true);
+ LocustHealthActivity.this.cbSafClothingOveralls.setEnabled(true);
+ LocustHealthActivity.this.cbSafClothingCaps.setEnabled(true);
+ LocustHealthActivity.this.cbSafClothingBoots.setEnabled(true);
+ }
+ LocustHealthActivity.this.edtClothing.setText(val);
+ }
+ };
+ cbSafClothingGoggles = (CheckBox) findViewById(R.id.cbSafClothingGoggles);
+ cbSafClothingGoggles.setOnCheckedChangeListener(cclsl);
+ cbSafClothingMasks = (CheckBox) findViewById(R.id.cbSafClothingMasks);
+ cbSafClothingMasks.setOnCheckedChangeListener(cclsl);
+ cbSafClothingGloves = (CheckBox) findViewById(R.id.cbSafClothingGloves);
+ cbSafClothingGloves.setOnCheckedChangeListener(cclsl);
+ cbSafClothingOveralls = (CheckBox) findViewById(R.id.cbSafClothingOveralls);
+ cbSafClothingOveralls.setOnCheckedChangeListener(cclsl);
+ cbSafClothingCaps = (CheckBox) findViewById(R.id.cbSafClothingCaps);
+ cbSafClothingCaps.setOnCheckedChangeListener(cclsl);
+ cbSafClothingBoots = (CheckBox) findViewById(R.id.cbSafClothingBoots);
+ cbSafClothingBoots.setOnCheckedChangeListener(cclsl);
+ cbSafClothingAbsent = (CheckBox) findViewById(R.id.cbSafClothingAbsent);
+ cbSafClothingAbsent.setOnCheckedChangeListener(cclsl);
+
+ edtClothing = (EditText) findViewById(R.id.edtClothing);
+ guiTable.add(edtClothing, "safety_clothing");
+
+ edtClothing.addTextChangedListener(new TextWatcher()
+ {
+ public void afterTextChanged(Editable s)
+ {
+ }
+
+ public void beforeTextChanged(CharSequence s, int start, int count, int after)
+ {
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count)
+ {
+ String str = LocustHealthActivity.this.edtClothing.getText().toString();
+
+ if (str.indexOf("1") != -1)
+ LocustHealthActivity.this.cbSafClothingGoggles.setChecked(true);
+ if (str.indexOf("2") != -1)
+ LocustHealthActivity.this.cbSafClothingMasks.setChecked(true);
+ if (str.indexOf("3") != -1)
+ LocustHealthActivity.this.cbSafClothingGloves.setChecked(true);
+ if (str.indexOf("4") != -1)
+ LocustHealthActivity.this.cbSafClothingOveralls.setChecked(true);
+ if (str.indexOf("5") != -1)
+ LocustHealthActivity.this.cbSafClothingCaps.setChecked(true);
+ if (str.indexOf("6") != -1)
+ LocustHealthActivity.this.cbSafClothingBoots.setChecked(true);
+ if (str.indexOf("7") != -1)
+ LocustHealthActivity.this.cbSafClothingAbsent.setChecked(true);
+
+ }
+ });
+
+ spiProtectiveClothingClean = findViewById(R.id.spiProtectiveClothingClean);
+ guiTable.add(spiProtectiveClothingClean, "safety_clothing_clean");
+ ((selectDB)spiProtectiveClothingClean).addField("", "");
+ ((selectDB)spiProtectiveClothingClean).addField(getString(R.string.Yes), "1");
+ ((selectDB)spiProtectiveClothingClean).addField(getString(R.string.No), "0");
+
+ spiOperatorExposedInsecticide = findViewById(R.id.spiOperatorExposedInsecticide);
+ guiTable.add(spiOperatorExposedInsecticide, "safety_operator_health");
+ ((selectDB)spiOperatorExposedInsecticide).addField("", "");
+ ((selectDB)spiOperatorExposedInsecticide).addField(getString(R.string.Yes), "1");
+ ((selectDB)spiOperatorExposedInsecticide).addField(getString(R.string.No), "0");
+
+ edtDescription = (EditText) findViewById(R.id.edtDescription); // если да, то какое
+ guiTable.add(edtDescription, "description");
+
+ cbTest = (CheckBox) findViewById(R.id.cbTest);
+ guiTable.add(cbTest, "test");
+
+ OnCheckedChangeListener ccl = new OnCheckedChangeListener()
+ {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
+ {
+ String val = "";
+ if (LocustHealthActivity.this.cbSafInformFarmer.isChecked())
+ val += '1';
+ if (LocustHealthActivity.this.cbSafInformShepherd.isChecked())
+ val += '6';
+ if (LocustHealthActivity.this.cbSafInformVillager.isChecked())
+ val += '2';
+ if (LocustHealthActivity.this.cbSafInformOfficial.isChecked())
+ val += '3';
+ if (LocustHealthActivity.this.cbSafInformBeekeeper.isChecked())
+ val += '4';
+ if (LocustHealthActivity.this.cbSafInformOther.isChecked())
+ val += '5';
+ LocustHealthActivity.this.edtInform.setText(val);
+ }
+ };
+ cbSafInformFarmer = (CheckBox) findViewById(R.id.cbSafInformFarmer); // Кто был оповещен об обработках? Фермер
+ cbSafInformFarmer.setOnCheckedChangeListener(ccl);
+ cbSafInformShepherd = (CheckBox) findViewById(R.id.cbSafInformShepherd); // Кто был оповещен об обработках? Пастух
+ cbSafInformShepherd.setOnCheckedChangeListener(ccl);
+ cbSafInformVillager = (CheckBox) findViewById(R.id.cbSafInformVillager); // Кто был оповещен об обработках? Сельский житель
+ cbSafInformVillager.setOnCheckedChangeListener(ccl);
+ cbSafInformOfficial = (CheckBox) findViewById(R.id.cbSafInformOfficial); // Кто был оповещен об обработках? Чиновник
+ cbSafInformOfficial.setOnCheckedChangeListener(ccl);
+ cbSafInformBeekeeper = (CheckBox) findViewById(R.id.cbSafInformBeekeeper); // Кто был оповещен об обработках? Пчеловод
+ cbSafInformBeekeeper.setOnCheckedChangeListener(ccl);
+ cbSafInformOther = (CheckBox) findViewById(R.id.cbSafInformOther); // Кто был оповещен об обработках? Другие
+ cbSafInformOther.setOnCheckedChangeListener(ccl);
+
+ edtInform = (EditText) findViewById(R.id.edtInform);
+ guiTable.add(edtInform, "safety_inform");
+
+ edtInform.addTextChangedListener(new TextWatcher()
+ {
+ public void afterTextChanged(Editable s)
+ {
+ }
+
+ public void beforeTextChanged(CharSequence s, int start, int count, int after)
+ {
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count)
+ {
+ String str = LocustHealthActivity.this.edtInform.getText().toString();
+
+ if (str.indexOf("1") != -1)
+ LocustHealthActivity.this.cbSafInformFarmer.setChecked(true); // Кто был оповещен об обработках? Фермер
+ if (str.indexOf("6") != -1)
+ LocustHealthActivity.this.cbSafInformShepherd.setChecked(true); // Кто был оповещен об обработках? Фермер
+ if (str.indexOf("2") != -1)
+ LocustHealthActivity.this.cbSafInformVillager.setChecked(true); // Кто был оповещен об обработках? Сельский житель
+ if (str.indexOf("3") != -1)
+ LocustHealthActivity.this.cbSafInformOfficial.setChecked(true); // Кто был оповещен об обработках? Чиновник
+ if (str.indexOf("4") != -1)
+ LocustHealthActivity.this.cbSafInformBeekeeper.setChecked(true); // Кто был оповещен об обработках? Пчеловод
+ if (str.indexOf("5") != -1)
+ LocustHealthActivity.this.cbSafInformOther.setChecked(true); // Кто был оповещен об обработках? Пчеловод
+
+ }
+ });
+
+
+ //spiSafEmptyСontainers = findViewById(R.id.spiSafEmptyContainers); // Что сделали с пустыми контейнерами
+ //guiTable.add(spiSafEmptyСontainers, "safety_container_id");
+ //spiSafEmptyСontainers.addField(this, "", "");
+ dboh = new DbOpenHelper(this);
+ cursor = dboh
+ .getReadableDatabase()
+ .rawQuery(
+ "select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
+ + Tools.getLang() + "' LIMIT 1),d.name) name from list_containers d where d.del=0 order by d.sort,d.name", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ //spiSafEmptyСontainers.addField(this, cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
+
+ if(cursor.getLong(cursor.getColumnIndex("id"))==1)
+ ((CheckBox) findViewById(R.id.cbTripleRinsed)).setText(cursor.getString(cursor.getColumnIndex("name")));
+ if(cursor.getLong(cursor.getColumnIndex("id"))==2)
+ ((CheckBox) findViewById(R.id.cbPunctured)).setText(cursor.getString(cursor.getColumnIndex("name")));
+ if(cursor.getLong(cursor.getColumnIndex("id"))==3)
+ ((CheckBox) findViewById(R.id.cbTakenBackToBase)).setText(cursor.getString(cursor.getColumnIndex("name")));
+ if(cursor.getLong(cursor.getColumnIndex("id"))==4)
+ ((CheckBox) findViewById(R.id.cbLeftInField)).setText(cursor.getString(cursor.getColumnIndex("name")));
+ if(cursor.getLong(cursor.getColumnIndex("id"))==5)
+ ((CheckBox) findViewById(R.id.cbBuried)).setText(cursor.getString(cursor.getColumnIndex("name")));
+ if(cursor.getLong(cursor.getColumnIndex("id"))==6)
+ ((CheckBox) findViewById(R.id.cbBurned)).setText(cursor.getString(cursor.getColumnIndex("name")));
+
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+
+ ccl = new OnCheckedChangeListener()
+ {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
+ {
+ String val = "";
+ if (LocustHealthActivity.this.cbTripleRinsed.isChecked())
+ val += '1';
+ if (LocustHealthActivity.this.cbPunctured.isChecked())
+ val += '2';
+ if (LocustHealthActivity.this.cbTakenBackToBase.isChecked())
+ val += '3';
+ if (LocustHealthActivity.this.cbLeftInField.isChecked())
+ val += '4';
+ if (LocustHealthActivity.this.cbBuried.isChecked())
+ val += '5';
+ if (LocustHealthActivity.this.cbBurned.isChecked())
+ val += '6';
+ LocustHealthActivity.this.edtSafEmptyContainers.setText(val);
+ }
+ };
+ cbTripleRinsed = (CheckBox) findViewById(R.id.cbTripleRinsed);
+ cbTripleRinsed.setOnCheckedChangeListener(ccl);
+ cbPunctured = (CheckBox) findViewById(R.id.cbPunctured);
+ cbPunctured.setOnCheckedChangeListener(ccl);
+ cbTakenBackToBase = (CheckBox) findViewById(R.id.cbTakenBackToBase);
+ cbTakenBackToBase.setOnCheckedChangeListener(ccl);
+ cbLeftInField = (CheckBox) findViewById(R.id.cbLeftInField);
+ cbLeftInField.setOnCheckedChangeListener(ccl);
+ cbBuried = (CheckBox) findViewById(R.id.cbBuried);
+ cbBuried.setOnCheckedChangeListener(ccl);
+ cbBurned = (CheckBox) findViewById(R.id.cbBurned);
+ cbBurned.setOnCheckedChangeListener(ccl);
+
+ edtSafEmptyContainers = (EditText) findViewById(R.id.edtSafEmptyContainers);
+ guiTable.add(edtSafEmptyContainers, "safety_container");
+
+
+ edtSafEmptyContainers.addTextChangedListener(new TextWatcher()
+ {
+ public void afterTextChanged(Editable s)
+ {
+ }
+
+ public void beforeTextChanged(CharSequence s, int start, int count, int after)
+ {
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count)
+ {
+ String str = LocustHealthActivity.this.edtSafEmptyContainers.getText().toString();
+ if (str.indexOf("1") != -1)
+ LocustHealthActivity.this.cbTripleRinsed.setChecked(true);
+ if (str.indexOf("2") != -1)
+ LocustHealthActivity.this.cbPunctured.setChecked(true);
+ if (str.indexOf("3") != -1)
+ LocustHealthActivity.this.cbTakenBackToBase.setChecked(true);
+ if (str.indexOf("4") != -1)
+ LocustHealthActivity.this.cbLeftInField.setChecked(true);
+ if (str.indexOf("5") != -1)
+ LocustHealthActivity.this.cbBuried.setChecked(true);
+ if (str.indexOf("6") != -1)
+ LocustHealthActivity.this.cbBurned.setChecked(true);
+ }
+ });
+
+ spiSafNonTarget = findViewById(R.id.spiSafNonTarget); // воздействие на нецелевые организмы
+ guiTable.add(spiSafNonTarget, "safety_non_target");
+ ((selectDB)spiSafNonTarget).addField("", "");
+ ((selectDB)spiSafNonTarget).addField(getString(R.string.Yes), "1");
+ ((selectDB)spiSafNonTarget).addField(getString(R.string.No), "0");
+
+ edtSafNonTargetEffect = (EditText) findViewById(R.id.edtSafNonTargetEffect); // если да, то какое
+ guiTable.add(edtSafNonTargetEffect, "safety_non_target_effect");
+
+ // "safety_incident boolean," + //Другие инциденты по здоровью или окружающей среде, возникшие возможно при обработке
+ // "safety_incident_effect text," + //Если Да, тип инцидента и кем сообщен (описание)
+ spiSafIncident = findViewById(R.id.spiSafIncident); // Другие инциденты по здоровью или окружающей среде, возникшие возможно при обработке
+ guiTable.add(spiSafIncident, "safety_incident");
+ ((selectDB)spiSafIncident).addField("", "");
+ ((selectDB)spiSafIncident).addField(getString(R.string.Yes), "1");
+ ((selectDB)spiSafIncident).addField(getString(R.string.No), "0");
+
+ edtSafIncidentEffect = (EditText) findViewById(R.id.edtSafIncidentEffect); // Если Да, тип инцидента и кем сообщен (описание)
+ guiTable.add(edtSafIncidentEffect, "safety_incident_effect");
+
+ edtComments = (EditText) findViewById(R.id.edtComments); // КОММЕНТАР�?�?
+ guiTable.add(edtComments, "comments");
+
+ // *** Кнопки ***
+ btnGetGPSCenter = (View) findViewById(R.id.btnGetGPSCenter);
+ OnClickListener oclBtnGetGPSCenter = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ DecimalFormatSymbols custom = new DecimalFormatSymbols(new Locale("en", "US"));
+ custom.setDecimalSeparator('.');
+
+ DecimalFormat df = new DecimalFormat("0.0000000");
+ df.setDecimalFormatSymbols(custom);
+
+ if(LocustHealthActivity.this._lat!=0 && LocustHealthActivity.this._lon!=0) {
+ LocustHealthActivity.this.edtLatCenter.setText(df.format(LocustHealthActivity.this._lat));
+ LocustHealthActivity.this.edtLonCenter.setText(df.format(LocustHealthActivity.this._lon));
+ }
+ //Checking if the GPS is active and if it is inactive, I display a warning about it
+ LocationManager locationManager = (LocationManager) LocustHealthActivity.this.getSystemService(Context.LOCATION_SERVICE);;
+ if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
+ Toast.makeText(LocustHealthActivity.this, LocustHealthActivity.this.getResources().getString(R.string.Please_activate_GPS), Toast.LENGTH_LONG).show();
+ }
+ }
+ };
+ btnGetGPSCenter.setOnClickListener(oclBtnGetGPSCenter);
+
+ btnDelGPSCenter = (View) findViewById(R.id.btnDelGPSCenter);
+ btnDelGPSCenter.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ LocustHealthActivity.this.edtLatCenter.setText("");
+ LocustHealthActivity.this.edtLonCenter.setText("");
+ }
+ });
+
+ btnOnMap = (View) findViewById(R.id.btnOnMap);
+ OnClickListener oclBtnOnMap = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ Intent intent = new Intent(LocustHealthActivity.this, MapsActivity.class);
+ intent.putParcelableArrayListExtra("LatLon", ((LatLonAdapter)latlonList.getAdapter()).latlonList);
+ intent.putExtra("uid", uid);
+ startActivityForResult(intent,4);
+ }
+ };
+ btnOnMap.setOnClickListener(oclBtnOnMap);
+
+ // android:id="@+id/btnOk"
+ btnOk = (View) findViewById(R.id.btnOk);
+ OnClickListener oclBtnOk = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ saveData();
+ }
+ };
+ btnOk.setOnClickListener(oclBtnOk);
+
+ btnCancel = (View) findViewById(R.id.btnCancel);
+ OnClickListener oclBtnCancel = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ AlertDialog.Builder adb = new AlertDialog.Builder(LocustHealthActivity.this, R.style.AlertDialogTheme);
+ adb.setTitle(getString(R.string.Warning));
+ adb.setMessage(LocustHealthActivity.this.getResources().getString(R.string.Cancel_filling_form));
+ adb.setPositiveButton(LocustHealthActivity.this.getResources().getString(R.string.Yes), new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ LocustHealthActivity.this.finish();
+ }
+ });
+ adb.setNegativeButton(LocustHealthActivity.this.getResources().getString(R.string.No), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+
+ }
+ });
+ AlertDialog ad = adb.show();
+ ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
+ ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
+ }
+ };
+ btnCancel.setOnClickListener(oclBtnCancel);
+ /*
+ * btnImage = (View) findViewById(R.id.btnImage); OnClickListener oclBtnImage = new OnClickListener() {
+ *
+ * @Override public void onClick(View v) { File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust"); directory.mkdirs();
+ *
+ * tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";
+ *
+ * File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName); mImageUri = Uri.fromFile(file);
+ *
+ * Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(intent, 1); } }; btnImage.setOnClickListener(oclBtnImage);
+ */
+
+ btnImage1 = (View) findViewById(R.id.btnImage1);
+ OnClickListener oclBtnImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ // Создаём папку если её нет
+ File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
+ directory.mkdirs();
+
+ tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";
+
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ mImageUri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
+ else
+ mImageUri = Uri.fromFile(file);
+
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
+ startActivityForResult(intent, 1);
+ }
+ };
+ btnImage1.setOnClickListener(oclBtnImage);
+
+ btnImage2 = (View) findViewById(R.id.btnImage2);
+ oclBtnImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ // Создаём папку если её нет
+ File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
+ directory.mkdirs();
+
+ tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";
+
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ mImageUri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
+ else
+ mImageUri = Uri.fromFile(file);
+
+
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
+ startActivityForResult(intent, 2);
+ }
+ };
+ btnImage2.setOnClickListener(oclBtnImage);
+
+ btnImage3 = (View) findViewById(R.id.btnImage3);
+ oclBtnImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ // Создаём папку если её нет
+ File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
+ directory.mkdirs();
+
+ tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";
+
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ mImageUri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
+ else
+ mImageUri = Uri.fromFile(file);
+
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
+ startActivityForResult(intent, 3);
+ }
+ };
+ btnImage3.setOnClickListener(oclBtnImage);
+
+ /*
+ * btnShowImage = (View) findViewById(R.id.btnShowImage1); OnClickListener oclBtnShowImage = new OnClickListener() {
+ *
+ * @Override public void onClick(View v) { File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage1.getText().toString()); Intent i = new Intent(); i.setAction(android.content.Intent.ACTION_VIEW); i.setDataAndType(Uri.fromFile(file), "image/jpg"); startActivity(i); } }; btnShowImage.setOnClickListener(oclBtnShowImage);
+ */
+
+ btnShowImage1 = (View) findViewById(R.id.btnShowImage1); // Отобразить фотографию 1 в новом окне
+ OnClickListener oclBtnShowImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage1.getText().toString());
+ if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage1.getText().toString());
+ if (file.isFile()) {
+ //Uri uri = Uri.fromFile(file);
+ Uri uri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);
+
+ Intent i = new Intent();
+ i.setAction(Intent.ACTION_VIEW);
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ i.setDataAndType(uri, "image/jpg");
+ startActivity(i);
+ }
+ }
+ };
+ btnShowImage1.setOnClickListener(oclBtnShowImage);
+
+ btnShowImage2 = (View) findViewById(R.id.btnShowImage2); // Отобразить фотографию 1 в новом окне
+ oclBtnShowImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage2.getText().toString());
+ if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage2.getText().toString());
+ if (file.isFile()) {
+ //Uri uri = Uri.fromFile(file);
+ Uri uri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);
+
+ Intent i = new Intent();
+ i.setAction(Intent.ACTION_VIEW);
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ i.setDataAndType(uri, "image/jpg");
+ startActivity(i);
+ }
+ }
+ };
+ btnShowImage2.setOnClickListener(oclBtnShowImage);
+
+ btnShowImage3 = (View) findViewById(R.id.btnShowImage3); // Отобразить фотографию 3 в новом окне
+ oclBtnShowImage = new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage3.getText().toString());
+ if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage3.getText().toString());
+ if (file.isFile()) {
+ //Uri uri = Uri.fromFile(file);
+ Uri uri = FileProvider.getUriForFile(LocustHealthActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);
+
+ Intent i = new Intent();
+ i.setAction(Intent.ACTION_VIEW);
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ i.setDataAndType(uri, "image/jpg");
+ startActivity(i);
+ }
+ }
+ };
+ btnShowImage3.setOnClickListener(oclBtnShowImage);
+
+ btnDelImage1 = (View) findViewById(R.id.btnDelImage1);
+ btnDelImage1.setOnClickListener(
+ new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ edtImage1.setText("");
+ }
+ }
+ );
+
+ btnDelImage2 = (View) findViewById(R.id.btnDelImage2);
+ btnDelImage2.setOnClickListener(
+ new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ edtImage2.setText("");
+ }
+ }
+ );
+
+ btnDelImage3 = (View) findViewById(R.id.btnDelImage3);
+ btnDelImage3.setOnClickListener(
+ new OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ edtImage3.setText("");
+ }
+ }
+ );
+
+
+ // Взависимости от параметров создание или редактирование
+ editData(uid);
+ adapter.notifyDataSetChanged();
+ Tools.setListViewHeightBasedOnItems(latlonList);
+
+ //updateAlpha(); movied to onResume
+
+ // Чтоб слушать GPS (в конце метода чтобы успели присвоиться GUI компоненты локальным переменным)
+ _lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ _lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, this);
+ }
+
+ @Override
+ public void onResume(){
+ super.onResume();
+
+ if(spiCountry.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiCountry).updateAdapter(this);
+ if(spiRegion.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiRegion).updateAdapter(this);
+ if(spiVegType.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegType).updateAdapter(this);
+ if(spiVegCover.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegCover).updateAdapter(this);
+ if(spiVegDamage.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegDamage).updateAdapter(this);
+ if(spiInsFormulation.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiInsFormulation).updateAdapter(this);
+ if(spiWeaTimeStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWeaTimeStart).updateAdapter(this);
+ if(spiWeaTimeEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWeaTimeEnd).updateAdapter(this);
+ if(spiWindDirectionStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWindDirectionStart).updateAdapter(this);
+ if(spiWindDirectionEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWindDirectionEnd).updateAdapter(this);
+ if(spiSprayDirectionStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprayDirectionStart).updateAdapter(this);
+ if(spiSprayDirectionEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprayDirectionEnd).updateAdapter(this);
+ if(spiLocSpeciese.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocSpeciese).updateAdapter(this);
+ if(spiLocHoppers.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocHoppers).updateAdapter(this);
+ if(spiImago.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiImago).updateAdapter(this);
+ if(spiKuliguli.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiKuliguli).updateAdapter(this);
+ if(spiSwarm.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSwarm).updateAdapter(this);
+ if(spiSparse.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSparse).updateAdapter(this);
+ if(spiLocustPhaseId.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocustPhaseId).updateAdapter(this);
+ if(spiSprPlatform.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatform).updateAdapter(this);
+ if(spiSprPlatformA.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformA).updateAdapter(this);
+ if(spiSprPlatformG.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformG).updateAdapter(this);
+ if(spiSprPlatformH.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformH).updateAdapter(this);
+ if(spiSprBarrier.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprBarrier).updateAdapter(this);
+ if(spiSprMarking.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprMarking).updateAdapter(this);
+ if(spiEffMethod.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiEffMethod).updateAdapter(this);
+ if(spiProtectiveClothingClean.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiProtectiveClothingClean).updateAdapter(this);
+ if(spiOperatorExposedInsecticide.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiOperatorExposedInsecticide).updateAdapter(this);
+ if(spiSafNonTarget.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafNonTarget).updateAdapter(this);
+ if(spiSafIncident.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafIncident).updateAdapter(this);
+
+ updateAlpha();
+ }
+
+ // Сохраняются настройки перед уничтожением формы
+ @Override
+ protected void onSaveInstanceState(Bundle outState)
+ {
+ super.onSaveInstanceState(outState);
+ if (mImageUri != null)
+ {
+ outState.putString("cameraImageUri", mImageUri.toString());
+ }
+ // Сохраняем название рисунка (Не знаю почему но автоматом не сохраняет)
+ outState.putString("ImageName", edtImage1.getText().toString());
+ //Сохраняю список координат LatLon
+ LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
+ ArrayList list = adapter.latlonList;
+ for(int i=0;i points = data.getParcelableArrayListExtra("LatLon");
+ LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
+ ArrayList list = adapter.latlonList;
+ list.clear();
+ for(int i=0;i list = ((LatLonAdapter)latlonList.getAdapter()).latlonList;
+ for(int i=0;i list = adapter.latlonList;
+ list.clear();
+ DbOpenHelper dboh = new DbOpenHelper(this);
+ Cursor cursor = dboh.getReadableDatabase().rawQuery("select lat,lon from frmlocustdel_locations where frmlocustdel_uid='" + uid + "' order by pos", null);
+ if (cursor.moveToFirst())
+ {
+ do
+ {
+ list.add(new LatLon(cursor.getDouble(0), cursor.getDouble(1)));
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ dboh.close();
+ list.add(new LatLon(0, 0));
+ }
+ }
+
+ /***
+ * Переместить и сфокусировать на переданном элементе
+ */
+ public void scrollTo(View item)
+ {
+ int top = 0;
+ View tmp = item;
+ while (tmp != null)
+ {
+ if (tmp == scrollView1)
+ {
+ scrollView1.scrollTo(0, top);
+ item.requestFocus();
+ break;
+ }
+
+ top += tmp.getTop();
+ tmp = (View) tmp.getParent();
+ }
+ }
+
+ public void alert(String text)
+ {
+ AlertDialog.Builder adb = new AlertDialog.Builder(this,R.style.AlertDialogTheme);
+ adb.setTitle(getString(R.string.Warning));
+ adb.setMessage(text);
+ adb.setPositiveButton("OK", new DialogInterface.OnClickListener() // Кнопка открыть
+ {
+ @Override
+ public void onClick(DialogInterface arg0, int arg1)
+ {
+ }
+ });
+ AlertDialog ad = adb.show();
+ ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
+ }
+
+ public boolean isGONE(View view)
+ {
+ if (!view.isClickable())
+ return true;
+ try {
+ while (view != null) {
+ if (view.getVisibility() == View.GONE)
+ return true;
+
+ view = (View) view.getParent();
+ if(view==getWindow().getDecorView().getRootView())
+ break;
+ }
+ }catch (Exception e)
+ {}
+ return false;
+ }
+
+ /**
+ * Save to the database
+ */
+ public void saveData()
+ {
+ // Checking for fullness of fields
+ String atxt = getString(R.string.Not_filled); // Текст для алерта: "Не заполнено поле".
+ boolean eFields = false; // У анкеты 2 состояния 1) Заполнены все обяз поля 2) Не заполнены все обяз поля
+
+ if (!eFields && !isGONE(spiCountry) && ((selectDB)spiCountry).getText().toString().equals(""))
+ {
+ scrollTo(spiCountry);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Country) + "\"!"; //@string/Country
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiRegion) && (((selectDB)spiRegion).getValue() == null || ((selectDB)spiRegion).getValue().equals("")))
+ {
+ scrollTo(spiRegion);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Region) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtArea) && edtArea.getText().toString().equals(""))
+ {
+ scrollTo(edtArea);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Area) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtVillage) && edtVillage.getText().toString().equals(""))
+ {
+ scrollTo(edtVillage);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Name_of_the_village) + "\"!";
+ eFields = true;
+ }
+ if(!eFields && !isGONE(edtObserver) && edtObserver.getText().toString().equals(""))
+ {
+ scrollTo(edtObserver);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Name_of_survey_team_leader) + "\"!";
+ eFields = true;
+ }
+
+ if (!eFields && !isGONE(edtDate) && (((fieldDB)edtDate).getValue() == null || ((fieldDB)edtDate).getValue().equals("")))
+ {
+ scrollTo(edtDate);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Date) + "\"!";
+ eFields = true;
+ }
+ // TODO Не забыть раскоментировать при публикации новой версии
+ if (!eFields && (!isGONE(edtLatCenter) && edtLatCenter.getText().toString().equals("") || Tools.getDouble(edtLatCenter.getText().toString(),0.0) == 0))
+ {
+ scrollTo(edtLatCenter);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Lat_center) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && (!isGONE(edtLonCenter) && edtLonCenter.getText().toString().equals("") || Tools.getDouble(edtLonCenter.getText().toString(),0.0) == 0))
+ {
+ scrollTo(edtLonCenter);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Lon_center) + "\"!";
+ eFields = true;
+ }
+
+ if (!eFields && !isGONE(edtInfestedArea))
+ {
+ if(edtInfestedArea.getText().toString().equals(""))
+ {
+ scrollTo(edtInfestedArea);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Area_infested_ha) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtInfestedArea,0,1000)!="")
+ {
+ scrollTo(edtInfestedArea);
+ atxt = checkMinMaxI(edtInfestedArea,0,1000) + " \"" + getResources().getString(R.string.Area_infested_ha) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtTreatedArea))
+ {
+ if(edtTreatedArea.getText().toString().equals(""))
+ {
+ scrollTo(edtTreatedArea);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Area_treated_ha) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtTreatedArea,0,1000)!="")
+ {
+ scrollTo(edtTreatedArea);
+ atxt = checkMinMaxI(edtTreatedArea,0,1000) + " \"" + getResources().getString(R.string.Area_treated_ha) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiVegType) && ((selectDB)spiVegType).getText().toString().equals(""))
+ {
+ scrollTo(spiVegType);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Vegetation_type) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtVegHeight))
+ {
+ if(edtVegHeight.getText().toString().equals(""))
+ {
+ scrollTo(edtVegHeight);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Height_cm) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtVegHeight,0,600)!="")
+ {
+ scrollTo(edtVegHeight);
+ atxt = checkMinMaxI(edtVegHeight,0,600) + " \"" + getResources().getString(R.string.Height_cm) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiVegCover) && ((selectDB)spiVegCover).getText().toString().equals(""))
+ {
+ scrollTo(spiVegCover);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Del_Vegetation_cover) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiVegDamage) && ((selectDB)spiVegDamage).getText().toString().equals(""))
+ {
+ scrollTo(spiVegDamage);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Damage) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtVegDamageArea))
+ {
+ if(checkMinMaxI(edtVegDamageArea,0,100000)!="")
+ {
+ scrollTo(edtVegDamageArea);
+ atxt = checkMinMaxI(edtVegDamageArea,0,100000) + " \"" + getResources().getString(R.string.Damage_area_ha) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtInsName) && edtInsName.getText().toString().equals(""))
+ {
+ scrollTo(edtInsName);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Trade_name) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtInsActiveSubstance) && edtInsActiveSubstance.getText().toString().equals(""))
+ {
+ scrollTo(edtInsActiveSubstance);
+ atxt = atxt + ": \"" + getResources().getString(R.string.The_active_substance) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtInsConcentration))
+ {
+ if(edtInsConcentration.getText().toString().equals(""))
+ {
+ scrollTo(edtInsConcentration);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Concentration_A_S) + "\"!";
+ eFields = true;
+ }/*else
+ if(checkMinMaxI(edtInsConcentration,0,100)!="")
+ {
+ scrollTo(edtInsConcentration);
+ atxt = checkMinMaxI(edtInsConcentration,0,100) + " \"" + getResources().getString(R.string.Concentration_A_S) + "\"!";
+ eFields = true;
+ }*/
+ }
+ if (!eFields && !isGONE(spiInsFormulation) && ((selectDB)spiInsFormulation).getText().toString().equals(""))
+ {
+ scrollTo(spiInsFormulation);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Formulation) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtInsDose))
+ {
+ if(checkMinMaxI(edtInsDose,0.005f,5)!="")
+ {
+ scrollTo(edtInsDose);
+ atxt = checkMinMaxI(edtInsDose,0.005f,5) + " \"" + getResources().getString(R.string.Dose_rate_l_of_commercial_product_ha) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtInsRate))
+ {
+ if(checkMinMaxI(edtInsRate,0.1f,600)!="")
+ {
+ scrollTo(edtInsRate);
+ atxt = checkMinMaxI(edtInsRate,0.1f,600) + " \"" + getResources().getString(R.string.Rate_of_working_solution_l_ha) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtInsUsedVolume))
+ {
+ if(edtInsUsedVolume.getText().toString().equals(""))
+ {
+ scrollTo(edtInsUsedVolume);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Total_volume_of_working_solution_actually_applied_l) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtInsUsedVolume,1,450000)!="")
+ {
+ scrollTo(edtInsUsedVolume);
+ atxt = checkMinMaxI(edtInsUsedVolume,1,450000) + " \"" + getResources().getString(R.string.Total_volume_of_working_solution_actually_applied_l) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiWeaTimeStart) && ((selectDB)spiWeaTimeStart).getText().toString().equals(""))
+ {
+ scrollTo(spiWeaTimeStart);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Time_start) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiWeaTimeEnd) && ((selectDB)spiWeaTimeEnd).getText().toString().equals(""))
+ {
+ scrollTo(spiWeaTimeEnd);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Time_end) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtWeaTemperatureStart))
+ {
+ if(checkMinMaxI(edtWeaTemperatureStart,0,50)!="")
+ {
+ scrollTo(edtWeaTemperatureStart);
+ atxt = checkMinMaxI(edtWeaTemperatureStart,0,50) + " \"" + getResources().getString(R.string.Temperature_start) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtWeaTemperatureEnd))
+ {
+ if(checkMinMaxI(edtWeaTemperatureEnd,0,50)!="")
+ {
+ scrollTo(edtWeaTemperatureEnd);
+ atxt = checkMinMaxI(edtWeaTemperatureEnd,0,50) + " \"" + getResources().getString(R.string.Temperature_end) + "\"!";
+ eFields = true;
+ }
+ }
+
+ if (!eFields && !isGONE(edtWeaHumidityStart))
+ {
+ if(checkMinMaxI(edtWeaHumidityStart,0,100)!="")
+ {
+ scrollTo(edtWeaHumidityStart);
+ atxt = checkMinMaxI(edtWeaHumidityStart,0,100) + " \"" + getResources().getString(R.string.Relative_humidity_start) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtWeaHumidityEnd))
+ {
+ if(checkMinMaxI(edtWeaHumidityEnd,0,100)!="")
+ {
+ scrollTo(edtWeaHumidityEnd);
+ atxt = checkMinMaxI(edtWeaHumidityEnd,0,100) + " \"" + getResources().getString(R.string.Relative_humidity_end) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtWeaWindSpeedStart))
+ {
+ if(checkMinMaxI(edtWeaWindSpeedStart,0,20)!="")
+ {
+ scrollTo(edtWeaWindSpeedStart);
+ atxt = checkMinMaxI(edtWeaWindSpeedStart,0,20) + " \"" + getResources().getString(R.string.Wind_speed_start_m_s) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtWeaWindSpeedEnd))
+ {
+ if(checkMinMaxI(edtWeaWindSpeedEnd,0,20)!="")
+ {
+ scrollTo(edtWeaWindSpeedEnd);
+ atxt = checkMinMaxI(edtWeaWindSpeedEnd,0,20) + " \"" + getResources().getString(R.string.Wind_speed_end_m_s) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiLocSpeciese) && ((selectDB)spiLocSpeciese).getText().toString().equals(""))
+ {
+ scrollTo(spiLocSpeciese);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Type) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiLocHoppers) && ((selectDB)spiLocHoppers).getText().toString().equals(""))
+ {
+ scrollTo(spiLocHoppers);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Hopper_stages) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtLocDensity))
+ {
+ if(edtLocDensity.getText().toString().equals(""))
+ {
+ scrollTo(edtLocDensity);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Density_m2) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtLocDensity,0,80000)!="")
+ {
+ scrollTo(edtLocDensity);
+ atxt = checkMinMaxI(edtLocDensity,0,80000) + " \"" + getResources().getString(R.string.Density_m2) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiKuliguli) && ((selectDB)spiKuliguli).getText().toString().equals(""))
+ {
+ scrollTo(spiKuliguli);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Bands) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiSwarm) && ((selectDB)spiSwarm).getText().toString().equals(""))
+ {
+ scrollTo(spiSwarm);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Swarms) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiSparse) && ((selectDB)spiSparse).getText().toString().equals(""))
+ {
+ scrollTo(spiSparse);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Del_Scattered) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(spiSprPlatform) && ((selectDB)spiSprPlatform).getText().toString().equals(""))
+ {
+ scrollTo(spiSprPlatform);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Spray_platform) + "\"!";
+ eFields = true;
+ }
+ if (!eFields && !isGONE(edtSprHeight))
+ {
+ if(checkMinMaxI(edtSprHeight,1,100)!="")
+ {
+ scrollTo(edtSprHeight);
+ atxt = checkMinMaxI(edtSprHeight,1,100) + " \"" + getResources().getString(R.string.Atomizer_height_above_ground_m) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(spiSprBarrier) && ((selectDB)spiSprBarrier).getText().toString().equals(""))
+ {
+ scrollTo(spiSprBarrier);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Barriers) + "\"!";
+ eFields = true;
+ }
+
+ if (!eFields && !isGONE(edtSprBarrierWidth))
+ {
+ if(checkMinMaxI(edtSprBarrierWidth,1,300)!="")
+ {
+ scrollTo(edtSprBarrierWidth);
+ atxt = checkMinMaxI(edtSprBarrierWidth,1,300) + " \"" + getResources().getString(R.string.Barrier_width_m) + "\"!";
+ eFields = true;
+ }
+ }
+ if (!eFields && !isGONE(edtSprBarrierSpace))
+ {
+ if(checkMinMaxI(edtSprBarrierSpace,1,1000)!="")
+ {
+ scrollTo(edtSprBarrierSpace);
+ atxt = checkMinMaxI(edtSprBarrierSpace,1,1000) + " \"" + getResources().getString(R.string.Spacing_of_barriers_m) + "\"!";
+ eFields = true;
+ }
+ }
+
+ if (!eFields && !isGONE(edtSprSpeed))
+ {
+ if(edtSprSpeed.getText().toString().equals(""))
+ {
+ scrollTo(edtSprSpeed);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Forward_speed_km_h) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtSprSpeed,1,300)!="")
+ {
+ scrollTo(edtSprSpeed);
+ atxt = checkMinMaxI(edtSprSpeed,1,300) + " \"" + getResources().getString(R.string.Forward_speed_km_h) + "\"!";
+ eFields = true;
+ }
+ }
+ if(!eFields && !isGONE(edtEffMortality) )
+ {
+ if(edtEffMortality.getText().toString().equals(""))
+ {
+ scrollTo(edtEffMortality);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Biological_efficiency_of_treatment) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtEffMortality,0,100)!="")
+ {
+ scrollTo(edtEffMortality);
+ atxt = checkMinMaxI(edtEffMortality,0,100) + " \"" + getResources().getString(R.string.Biological_efficiency_of_treatment) + "\"!";
+ eFields = true;
+ }
+ }
+ if(!eFields && !isGONE(edtEffTime))
+ {
+ if(edtEffTime.getText().toString().equals(""))
+ {
+ scrollTo(edtEffTime);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Time_after_treatment_hours) + "\"!";
+ eFields = true;
+ }else
+ if(checkMinMaxI(edtEffTime,0,240)!="")
+ {
+ scrollTo(edtEffTime);
+ atxt = checkMinMaxI(edtEffTime,0,240) + " \"" + getResources().getString(R.string.Time_after_treatment_hours) + "\"!";
+ eFields = true;
+ }
+ }
+ if(!eFields && !isGONE(edtClothing) && edtClothing.getText().toString().equals(""))
+ {
+ scrollTo(edtClothing);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Protective_clothing) + "\"!";
+ eFields = true;
+ }
+ if(!eFields && !isGONE(spiSafNonTarget) && ((selectDB)spiSafNonTarget).getText().toString().equals("")) // воздействие на нецелевые организмы
+ {
+ scrollTo(spiSafNonTarget);
+ atxt = atxt + ": \"" + getResources().getString(R.string.Effect_on_non_terget_organism) + "\"!";
+ eFields = true;
+ }
+ if (eFields) // Если не заполнены все обязательные поля
+ {
+ m_Filled.setValue("0");
+
+ AlertDialog.Builder adb = new AlertDialog.Builder(this,R.style.AlertDialogTheme);
+ adb.setTitle(getString(R.string.Warning));
+
+ adb.setMessage(atxt + "\n" + getString(R.string.not_filled_fields));
+ adb.setPositiveButton(getString(R.string.Yes), new DialogInterface.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface arg0, int arg1)
+ {
+ // Do nothing
+ }
+ });
+ adb.setNegativeButton(getString(R.string.No), new DialogInterface.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface arg0, int arg1)
+ {
+ String uid=guiTable.write(); //Add or save data
+ saveLocations(uid);
+ LocustHealthActivity.this.finish(); // Close the form
+ }
+ });
+ AlertDialog ad = adb.show();
+ ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
+ ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
+
+ } else
+ {
+ m_Filled.setValue("1");
+
+ String uid=guiTable.write(); //Добавляем либо сохраняем данные
+ saveLocations(uid);
+
+ startService(new Intent(this, MainService.class).putExtra(MainService.PARAM_ACTION, "1")); // Чтоб вызвать событие таймера в сервисе
+ LocustHealthActivity.this.finish(); // Закрываем форму
+ }
+
+ }
+
+ /**
+ * СМ. http://developer.android.com/reference/android/app/Activity.html Событие происходит при старте и при возврате на этот Activity
+ * */
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ DbOpenHelper dboh = new DbOpenHelper(this);
+ SQLiteDatabase db = dboh.getReadableDatabase();
+ Cursor cursor = db.rawQuery("select * from terminals where del=0 and serial='"+ Secure.getString(getContentResolver(), Secure.ANDROID_ID)+"';", null);
+ if(!cursor.moveToFirst())
+ {
+ Toast toast = Toast.makeText(getApplicationContext(),
+ getResources().getString(R.string.Please_authorize_the_tablet), Toast.LENGTH_LONG);
+ toast.show();
+ }
+ cursor.close();
+ dboh.close();
+ }
+
+ @Override
+ public double getLat() {
+ return this._lat;
+ }
+
+ @Override
+ public double getLon() {
+ return this._lon;
+ }
+}
diff --git a/app/src/main/java/kz/istt/locust/MainActivity.java b/app/src/main/java/kz/istt/locust/MainActivity.java
index 71b98e1..12c5752 100644
--- a/app/src/main/java/kz/istt/locust/MainActivity.java
+++ b/app/src/main/java/kz/istt/locust/MainActivity.java
@@ -52,6 +52,7 @@ public class MainActivity extends Activity {
private Button btnSetup;
private Button btnLocust;
private Button btnLocustDel;
+ private Button btnLocustHealth;
private TextView tvAndroidID;
private TextView tvCountTasks;
@@ -154,7 +155,7 @@ public class MainActivity extends Activity {
//Кнопка вызова формы настроек
btnSetup = (Button) findViewById(R.id.btnSetup);
OnClickListener oclBtnSetup = new OnClickListener(){@Override
- public void onClick(View v){ onGetPermissions(3); }};
+ public void onClick(View v){ onGetPermissions(4); }};
btnSetup.setOnClickListener(oclBtnSetup);
//Кнопка вызова формы
@@ -169,6 +170,10 @@ public class MainActivity extends Activity {
public void onClick(View v){ onGetPermissions(2); }};
btnLocustDel.setOnClickListener(oclBtnLocustDel);
+ btnLocustHealth = (Button) findViewById(R.id.btnLocustHealth);
+ OnClickListener oclBtnLocustHealth = new OnClickListener(){@Override
+ public void onClick(View v){ onGetPermissions(3); }};
+ btnLocustHealth.setOnClickListener(oclBtnLocustHealth);
tvAndroidID = (TextView) findViewById(R.id.tvAndroidID);
String android_id = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
@@ -247,13 +252,14 @@ public class MainActivity extends Activity {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
list.add(Manifest.permission.CAMERA);
}
- if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- list.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2){
+ if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ list.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ }
+ if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ list.add(Manifest.permission.READ_EXTERNAL_STORAGE);
+ }
}
- if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- list.add(Manifest.permission.READ_EXTERNAL_STORAGE);
- }
-
if(!list.isEmpty())
{
@@ -277,6 +283,10 @@ public class MainActivity extends Activity {
ShowLocustDelActivity();
}
if(granted && button==3)
+ {
+ ShowLocustHealthActivity();
+ }
+ if(granted && button==4)
{
ShowSetupActivity();;
}
@@ -330,7 +340,13 @@ public class MainActivity extends Activity {
Intent intent = new Intent(this, LocustListActivity.class);
startActivity(intent);
}
-
+
+ public void ShowLocustHealthActivity()
+ {
+ Intent intent = new Intent(this, LocustHealthActivity.class);
+ startActivity(intent);
+ }
+
public void ShowLocustDelActivity()
{
//_translations
diff --git a/app/src/main/res/layout-land/activity_locust_del.xml b/app/src/main/res/layout-land/activity_locust_del.xml
index d6833b9..86b4b25 100644
--- a/app/src/main/res/layout-land/activity_locust_del.xml
+++ b/app/src/main/res/layout-land/activity_locust_del.xml
@@ -1026,8 +1026,11 @@
+ android:gravity="center">
+
-
-
+
-
-
+
-
-
-
-
-
-
@@ -1863,8 +1842,11 @@
+ android:gravity="center">
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-large/activity_locust_del.xml b/app/src/main/res/layout-large/activity_locust_del.xml
index 167b876..c4a25b1 100644
--- a/app/src/main/res/layout-large/activity_locust_del.xml
+++ b/app/src/main/res/layout-large/activity_locust_del.xml
@@ -975,8 +975,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Total_volume_of_working_solution_actually_applied_l"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"/>
+
-
@@ -1004,7 +1010,7 @@
android:layout_weight="1"
android:ems="10"
android:inputType="numberDecimal" />
-
+
-
@@ -1550,7 +1556,7 @@
android:id="@+id/spiSprCapacity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
-
+
-
@@ -1590,7 +1596,7 @@
android:layout_weight="1"
android:ems="10"
android:inputType="text" />
-
+
-
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"/>
+
-
-
-
-
-
-
-
@@ -1948,32 +1943,6 @@
android:visibility="invisible" />
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout-large/activity_locust_health.xml b/app/src/main/res/layout-large/activity_locust_health.xml
new file mode 100644
index 0000000..892fd6e
--- /dev/null
+++ b/app/src/main/res/layout-large/activity_locust_health.xml
@@ -0,0 +1,2323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_locust_del.xml b/app/src/main/res/layout/activity_locust_del.xml
index 7c37407..14c1998 100644
--- a/app/src/main/res/layout/activity_locust_del.xml
+++ b/app/src/main/res/layout/activity_locust_del.xml
@@ -1131,8 +1131,11 @@
+ android:gravity="center">
+
-
-
+
-
-
+
-
-
-
-
-
-
@@ -1850,8 +1829,11 @@
+ android:gravity="center">
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 90cd2dd..dc8b7f5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -89,7 +89,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
- android:layout_marginBottom="62dp"
android:layout_marginLeft="62dp"
android:layout_marginRight="62dp"
android:minHeight="70dp"
@@ -100,6 +99,18 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
+ android:layout_marginTop="52dp"
+ android:layout_marginLeft="62dp"
+ android:layout_marginRight="62dp"
+ android:minHeight="70dp"
+ android:text="@string/title_activity_locust_del"/>
+
+
Əl
Çiləmə növü
- Çiləyicinin markası
- Çiləyicinin modeli
+ Çiləyicinin markası/modeli
Torpaq səthi üzərindən püskürdücünün hündürlüyü (m)
Zolaqlar (baryerlər)
Zolaqların eni (m)
- Zolaqlar arasında məsafə (m)
+ Keçidlər arasındakı interval (m)
Hərəkətin orta sürəti (km/saat)
DGPS antennası istifadə olunub
Yerüstü nişanlama
Yerüstü nişanlama
- Çiləmələrin bioloji səmərəliliyi (%)
+ Müşahidə olunan müalicə effektivliyi (%)
Çiləmədən sonra keçən müddət (saat)
- Bioloji səmərəliliyin hesablanması üsulu
+ Müalicələrin effektivliyinin qiymətləndirilməsi üsulu
Təhlükəsizlik və ətraf mühit
Mühafizə geyimləri təmiz və yaxşı vəziyyətdədir
@@ -327,4 +326,5 @@
Telefonunuz/planşetiniz köhnəlib, onu yeniləyin
Test anketi
Çoxbucaqlı kopyalansın?
+ İnsan sağlığı və ətraf mühit
diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml
index da5e619..4edac68 100644
--- a/app/src/main/res/values-hy/strings.xml
+++ b/app/src/main/res/values-hy/strings.xml
@@ -209,19 +209,18 @@
Մեքենայացված
Ձեռքով
Սրսկման տեսակը
- Սրսկիչի անվանումը
- Սրսկիչի մոդելը
+ Սրսկիչի անվանումը/մոդելը
Սրսկման բարձրությունը հողի մակերևույթից (մ)
Արգելապատնեշներ
Արգելապատնեշի լայնությունը (մ)
- Միջարգելապատնեշային տարածությունը (մ)
+ Անցումների միջև ընդմիջում (մ)
Շարժման միջին արագությունը
Օգտագործվել է DGPS ալեհավաք
Տեղանշում
Արդյունավետության վերահսկում
- Սրսկման կենսաբանական արդյունավետություն (%)
+ Դիտարկված բուժման արդյունավետություն (%)
Սրսկումներից անցել է (ժամ)
- Կենսաբանական արդյունավետության հաշվարկման մեթոդ
+ Բուժման արդյունավետության գնահատման մեթոդ
Անվտանգություն և շրջակա միջավայր
Արտահագուստը մաքուր և լավ վիճակում է
@@ -337,4 +336,5 @@
Ձեր հեռախոսը/պլանշետը հնացած է, խնդրում ենք թարմացնել այն
Թեստային հարցաթերթիկ
Պատճենե՞լ բազմանկյունը:
+ Մարդու և շրջակա միջավայրի առողջություն
diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml
index a87abe0..f2105ae 100644
--- a/app/src/main/res/values-ka/strings.xml
+++ b/app/src/main/res/values-ka/strings.xml
@@ -204,19 +204,18 @@
სახმელეთო
ხელის
შესხურების სახეობა
- შემასხურებელის მარკა
- შემასხურებელის მოდელი
+ შემასხურებელის მარკა/მოდელი
შემასხურებელის სიმაღლე მიწის ზედაპირიდან (მ)
ბარიერები
ბარიერების სიგანე (მ)
- მანძილი ბარიერებს შორის (მ)
+ პასებს შორის ინტერვალი (მ)
მოძრაობის საშუალო სიჩქარე (კმ/სთ)
DGPS ანტენა გამოიყენებოდა
სახმელეთო - საორიენტაცია ნიშნები
ეფექტურობის კონტროლი
- დამუშავების ბიოლოგიური ეფექტურობა (%)
+ დაკვირვებული მკურნალობის ეფექტურობა (%)
დამუშავების შემდეგ გასული დრო
- ბიოლოგიური ეფექტურობის შეფასების მეთოდი
+ მკურნალობის ეფექტურობის შეფასების მეთოდი
უსაფრთხოება და ეკოლოგია
დამცავი ტანსაცმელი სუფთაა და კარგ მდგომარეობაში?
@@ -328,4 +327,5 @@
თქვენი ტელეფონი/ტაბლეტი მოძველებულია, გთხოვთ განაახლოთ იგი
ტესტის კითხვარი
დააკოპირეთ მრავალკუთხედი?
+ ადამიანის და გარე გარემოცვას ჯანმრთელობა
diff --git a/app/src/main/res/values-kg/strings.xml b/app/src/main/res/values-kg/strings.xml
index ec46e99..c74dfb6 100644
--- a/app/src/main/res/values-kg/strings.xml
+++ b/app/src/main/res/values-kg/strings.xml
@@ -203,19 +203,18 @@
Жердеги
Кол менен
Уу чачуу түрү
- Уу чачкычтын маркасы
- Уу чачкычтын модели
+ Уу чачкычтын маркасы/модели
Уу чачкычтын жерден бийиктиги (м)
Сап калтырып иштетүүлөр
Саптын туурасы (м)
- Саптын аралыгы (м)
+ Өтүүлөрдүн ортосундагы интервал (м)
Кыймылдын орточо ылдамдыгы (км/саат)
DGPS антеннасы колдонулдубу?
Жер бетине белги коюу
Эффективдүүлүктү контролдоо
- Иштетүүлөрдүн биологиялык эффективдүүлүгү (%)
+ Байланган дарылоо натыйжалуулугу (%)
Иштетүүдөн кийин өткөн убакыт (саат)
- Биологиялык эффективдүүлүктү эсептөө ыкмасы
+ Дарылоонун натыйжалуулугун баалоо ыкмасы
Коопсуздук жана курчап турган чөйрө
Коргоочу кийим таза жана жакшы абалдабы?
@@ -332,5 +331,5 @@
Телефонуңуз/планшетиңиз эскирген, аны жаңыртыңыз
Тест анкетасы
Көп бурчтук көчүрүлсүнбү?
-
+ Инсандын сагаты жана айылдык мойнунун сагынуусы.
diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml
index 8937cc8..571548a 100644
--- a/app/src/main/res/values-kk/strings.xml
+++ b/app/src/main/res/values-kk/strings.xml
@@ -206,19 +206,18 @@
Жер үсті
Қолмен
Бүркудің түрі
- Бүріккіштің маркасы
- Бүріккіштің моделі
+ Бүріккіштің маркасы/моделі
Бүріккіш шашқышының жер бетінен биіктігі (м)
Тосқауылдар
Тосқауылдың ені (м)
- Тосқауылдардың арасы (м)
+ Өтулер арасындағы интервал (м)
Орташа жүру жылдамдығы (км/ч)
DGPS антеннасы қолданылды
Жер үсті маркировкасы
Тиімділікті бақылау
- Өңдеудің биологиялық тиімділігі (%)
+ Бақыланатын емдеу тиімділігі (%)
Өңдеуден кейін өткен уақыт (сағат)
- Биологиялық тиімділікті анықтау үшін есептеу тәсілі
+ Емдеу тиімділігін бағалау әдісі
Қауіпсіздік және қоршаған орта
Қорғау киімі таза және жақсы қалыпта?
@@ -335,5 +334,6 @@
Телефоныңыз/планшетіңіз ескірген, оны жаңартыңыз
Тест сауалнамасы
Көпбұрышты көшіру керек пе?
+ Адамның денсаулығы мен шектеулі аурухана.
diff --git a/app/src/main/res/values-ps/strings.xml b/app/src/main/res/values-ps/strings.xml
index 01e7e5f..e895963 100644
--- a/app/src/main/res/values-ps/strings.xml
+++ b/app/src/main/res/values-ps/strings.xml
@@ -208,19 +208,18 @@
زمینی
فرد/ شخص
نوع محلول پاشی/ سمپاشی
- ساخت محلول پاش
- مودل محلول پاش
+ ساخت محلول پاش\مودل
ارتفاع اتومایزر بالای زمین ( m)
ساحه باقی مانده
عرض (m)
- فاصله (m)
+ فاصله بین پاس ها (m)
سرعت حرکت (km/h)
DGPS استفاده شده
علامت گذاری زمینی
مؤثریت کنترول
- تآثیرات بیولوژیکی کنترول (%)
+ بازده درمان مشاهده شده (%)
زمان بعد از کنترول ( ساعت )
- طریقه تخمین مؤثریت بیولوژیکی
+ روشی برای ارزیابی اثربخشی درمان ها
ایمنی و محیط
پاکی لباس تحفظی و حالت خوب بودن آن
@@ -340,4 +339,5 @@
ستاسو تلیفون / ټابلیټ زوړ دی، مهرباني وکړئ تازه یې کړئ
د ازموینې پوښتنلیک
کاپي پولیګون؟
+ زنده وجود د صحت او د محیطي خلکو سلامتي.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index da3b318..891c6c5 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -54,11 +54,11 @@
Отправленные
Время сервера и время КПК не совпадают
Выбрать
-
-
+
Обследование саранчи
Список обследований саранчи
Противосаранчовые обработки
+ Здоровье человека и окружающей среды
Список стандартных форм по борьбе с саранчой
ASDC
Настройки
@@ -199,7 +199,7 @@
Направление опрыскивания нач.
Направление опрыскивания кон.
Вид
- Вид
+ Тип
Возраст личинок
Плотность на м²
Стаи
@@ -211,19 +211,18 @@
Наземное
Ручное
Вид опрыскивания
- Марка опрыскивателя
- Модель опрыскивателя
+ Марка/модель опрыскивателя
Высота распылителя над поверхностью почвы (м)
Барьеры
Ширина барьера (м)
- Промежуток барьера (м)
+ Интервал между проходами (м)
Средняя скорость движения (км/ч)
Антенна: DGPS использовалась
Наземная маркировка
Контроль эффективности
- Биологическая эффективность обработки (%)
+ Наблюдаемая эффективность обработки (%)
Прошло времени после обработки (часов)
- Метод подсчета биологической эффективности
+ Метод оценки эффективности обработок
Безопасность и окружающая среда
Защитная одежда чистая и в хорошем состоянии?
@@ -344,5 +343,4 @@
Ваш смартфон/планшет устарел, пожалуйста обновите его
Тестовая анкета
Скопировать полигон?
-
diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml
index b09d15a..f790aec 100644
--- a/app/src/main/res/values-tg/strings.xml
+++ b/app/src/main/res/values-tg/strings.xml
@@ -204,19 +204,18 @@
Заминӣ
Дастӣ
Намуди дорупошӣ
- Тамғаи дорупошак
- Модели дорупошак
+ Тамғаи/модели дорупошак
Баландии пошдиҳак аз сатҳи хок (м)
Монеаҳо
Васеъгии монеа (м)
- Фосилаи монеа (м)
+ Фосилаи байни гузаришҳо (м)
Суръати миёнаи ҳаракат (км/с)
Истифодаи антенаи DGPS
Аломатгузории заминӣ
Назорати самаранокӣ
- Самаранокии биологии коркард (%)
+ Самаранокии табобат (%)
Гузаштани вақт пас аз коркард (соат)
- Усули ҳисоб кардани самаранокии биологӣ
+ Усули арзёбии самаранокии табобат
Бехатарӣ ва муҳити зист
Либосҳои муҳофизавӣ тоза ва дар ҳолати хуб аст?
@@ -339,4 +338,5 @@
Телефон/планшети шумо кӯҳна шудааст, лутфан онро навсозӣ кунед
Саволномаи тестӣ
Бисёркунҷаро нусхабардорӣ кунед?
+ Саломатии инсон ва муҳити зист
diff --git a/app/src/main/res/values-tk/strings.xml b/app/src/main/res/values-tk/strings.xml
index cb17706..fb06863 100644
--- a/app/src/main/res/values-tk/strings.xml
+++ b/app/src/main/res/values-tk/strings.xml
@@ -205,19 +205,18 @@
Ýeriň üstünden
El bilen
Sepilişiň görnüşi
- Pürküji enjamyň markasy
- Pürküji enjamyň modeli
+ Pürküji enjamyň markasy/modeli
Pürküjiniň ýerden beýikligi (m)
Zolaklar
Pürkülýän zolaklaryň ini (m)
- Zolakara meýdanyň ini (m)
+ Geçişleriň (m) aralygy
Hereketiň ortaça tizligi(km/sag)
Antena DGPS ulanyldy
Ýer üsti belgilenişi
Serişdäniň netijeliliginiň barlagy
- Işiň biologiki netijeliligi (%)
+ Göz öňünde tutulan bejerginiň netijeliligi (%)
Işlenenden soň geçen wagt
- Biýologiki netijeliligi hasaplamagyň usullary
+ Bejerginiň netijeliligini bahalandyrmagyň usuly
Howpsuzlyk we daşky gurşaw
Şahsy goranyş eşigi arassa we gowy ýagdaýda
@@ -338,4 +337,5 @@
Toparlaryň sany
Synag anketasy
Köpburçlygy göçüriň?
+ Adam döwleti we goraýyş ortalygyň saýlamlylygy.
diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml
index 79e1201..38b3d7f 100644
--- a/app/src/main/res/values-uz/strings.xml
+++ b/app/src/main/res/values-uz/strings.xml
@@ -206,19 +206,18 @@
Erdan
Qo\'l purkagichi
Purkash turi
- Purkagich rusumi
- Purkagich modeli
+ Purkagich rusumi/modeli
Purkashning er yuzasidan balandligi (m)
To\'siq
To\'siq uzunligi (m)
- To\'siq oralig\'i (m)
+ O\'tishlar orasidagi interval (m)
Harakatning o\'rtacha tezligi (km/s)
DGPS antennalardan foydalanilganligi
Purkash joyini belgilash
Samaradorligini tekshirish
- Ishlovning biologik samaradorligi (%)
+ Kuzatilgan davolash samaradorligi (%)
Ishlovdan keyin o\'tgan vaqt (soat)
- Biologik samaradorlikni aniqlash usuli
+ Davolashning samaradorligini baholash usuli
Xavfsizlik va atrof muhit
Himoya kiyimi toza va yaxshi holatdami?
@@ -340,4 +339,5 @@
Bantlar soni
Test anketasi
Ko‘pburchak nusxalansinmi?
+ Inson va atrof-muhit salomatligi
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b4f625..1b2072b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -221,12 +221,11 @@
Ground
Person
Spray type
- Sprayer manufacturer
- Sprayer model
+ Sprayer manufacturer/model
Atomizer height above ground (m)
Barriers
Barrier Width (m)
- Spacing of barriers (m)
+ Interval between passes (m)
Forward speed (km/h)
Antenna: DGPS used
Ground marking
@@ -344,4 +343,5 @@
Your smartphone/tablet is out of date, please update it
Test questionnaire
Copy polygon?
+ Human and environmental health
diff --git a/build.gradle b/build.gradle
index 0192d2a..46fe052 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.1.2'
+ classpath 'com.android.tools.build:gradle:8.3.2'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 71923c4..0fc107e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip