From 7daf52b806ae02835b58c88f14a4a36fd384d82d Mon Sep 17 00:00:00 2001 From: danielph01 Date: Wed, 9 Mar 2022 22:46:07 -0500 Subject: [PATCH 1/9] First commit. Update Android Gradle Plugin 4.0.0 to 7.2 --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 5 +++ app/build.gradle | 43 +++++++++++----------- app/src/main/res/layout/activity_main.xml | 2 - app/src/main/res/layout/dialog_food.xml | 1 + build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 7 files changed, 31 insertions(+), 28 deletions(-) delete mode 100644 .DS_Store create mode 100644 .gitignore diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 1855c69cc253e3514d97d149e85e168f66be4028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~I}XA?3`A{0fkcy%avKi74OR$FzyvIYIqf#4$mI7QhFYo8^+Vg;}!TM!kPMk^St>SKu2 zy&WuhT}`%Nw2S8Op?PPuDF&v|E?SVlv^p5502LT0&_&+c`M-sKoBszbOsN1B_%j7` zy4h{kc&R*FKVHx3`>fi!!9l+q;q4~?i5 - - diff --git a/app/src/main/res/layout/dialog_food.xml b/app/src/main/res/layout/dialog_food.xml index 5d923cb..48cdda5 100644 --- a/app/src/main/res/layout/dialog_food.xml +++ b/app/src/main/res/layout/dialog_food.xml @@ -1,4 +1,5 @@ + Date: Wed, 23 Mar 2022 16:54:25 -0400 Subject: [PATCH 2/9] Add country setting functon to change the pictures object with the country.json file --- app/.DS_Store | Bin 6148 -> 6148 bytes app/src/.DS_Store | Bin 6148 -> 6148 bytes app/src/main/assets/activity.json | 290 ++++++++++++++---- app/src/main/assets/countries.json | 7 + .../adapter/ObjectListAdapter.java | 11 +- .../timetracker/datastorage/DataManager.java | 46 --- .../timetracker/screens/FragmentActivity.java | 153 +++++++-- .../hdm/app/timetracker/screens/Settings.java | 45 ++- .../org/hdm/app/timetracker/util/Consts.java | 4 +- .../hdm/app/timetracker/util/FileLoader.java | 80 +---- .../app/timetracker/util/MyJsonParser.java | 36 +-- .../hdm/app/timetracker/util/Variables.java | 5 +- .../main/res/layout/fragment_activitys.xml | 23 +- app/src/main/res/layout/fragment_main.xml | 3 +- app/src/main/res/values/countries.xml | 19 ++ app/src/main/res/values/strings.xml | 13 + app/src/main/res/xml/settings.xml | 7 + 17 files changed, 489 insertions(+), 253 deletions(-) create mode 100644 app/src/main/assets/countries.json create mode 100644 app/src/main/res/values/countries.xml diff --git a/app/.DS_Store b/app/.DS_Store index 81229e8d26382bd3469cb3d9bb2de3f1954844ac..6240ba3af901faa8c5add164023378aed06430f0 100644 GIT binary patch literal 6148 zcmeHK&2G~`5T12XlBhxoQd`lRB{)W+X$n!r#f0zz7{LKhh~u=iaJ*6MkV6_|&h#OA zC^v4LIP(s?2XDa4?u5hy#0?=dBkg{>^RqvnH@g`CP@QSm1gHZ*6$_zL!|E48b}Ad< zux1-knK8onwCNA@XuRPoihq*<`gU6oz!V~gq452j^UBAfb)>u9Al3nDs~>i+3JKiSC<$LB}iccgJ719dGyc0IF8cn;NYurO69F<6_oADOaDyI{H&i% z(@uZ#oO(~Rj)P^pA3TkQvtE7Yp-!@Xlnf^(APR@*^5R*PgnHJ|(Rf|G4)$9wquctrt%_9(Nx{xY$3d6#z40eWtdmpJEEh~x z5n(_W5C-^8sL~rCA`A!v!oWHMbU(OQ2tCH!qPaS-GARIJ8P!IxO}PZcxQrfSZV@dg z%7!A^P{k>Rvf-$A+0SFlE!uEUoO~#rS#gG<%XE;SH6 U#@r%mP~?w*p+PEP;IA_99ThHw=Kufz delta 111 zcmZoMXfc=|#>AjHu~68Ak%57MnW31Wh#@&Gr8qe$KR*W~1O`k{8YBS30t`_3&4L_a rESm*bCNXbj=iui6nzWgbsGhjFq`exqG6_8`*y?ZbefCBZgp?}=ADPb7eN^DH?(5hA8~^e zc2Vi6yv0HOKu2DD=;8t?m^({eth>*=}1%-L{CjZFO6#uoG6awbvr zy-~TMe%pC%k?^W`i7=RW>$7=(AxyDNn)*prYnz-@&!q`y0{;X7+8<18q&=mXRIznn zCq4mC4Ri~`u{fhqO>&_2lx9-VgT`bjsw`#d6NAZe^qVTLr!^ zm>vD5NC(!Fs(Vd96DSkdl9zQl{~zExyypAAT%@lw0Zrh)BEXD+Gw9UkE;;Yz%Va%ifYENk<6+LMB9|3_ucbdRP3H$^wtLAqA delta 89 zcmZoMXfc=|#>AjHu~3+iadI!KgbV`%0}~K~03!qoFr=jvCnx3S=WG__5M$Y_z%h|| iGdl-A2T&hS impleme public String activeTime; public boolean leave; - public ObjectListAdapter(List activityObject) { this.list = activityObject; Log.d(TAG, "listSize " + list.size()); } - @Override public View_Holder onCreateViewHolder(ViewGroup parent, int viewType) { //Inflate the layout, initialize the View Holder @@ -46,11 +44,6 @@ public View_Holder onCreateViewHolder(ViewGroup parent, int viewType) { return holder; } - - - - - @Override public void onBindViewHolder(View_Holder holder, int position) { //Use the provided View Holder on the onCreateViewHolder method to populate the current row on the RecyclerView @@ -58,12 +51,10 @@ public void onBindViewHolder(View_Holder holder, int position) { holder.setListener(this); holder.title.setText(object.title); holder.activityList = false; + Log.d(TAG, "onBindViewHolder: " + object.imageName); if(dataManager.imageMap.get(object.imageName) != null ) holder.imageView.setImageBitmap((dataManager.imageMap.get(object.imageName))); if(!var.editable) { - - if(object.service != null) { - if(object.service.contains("Yes") && object.activeState) { holder.setBackground("blue"); } else { diff --git a/app/src/main/java/org/hdm/app/timetracker/datastorage/DataManager.java b/app/src/main/java/org/hdm/app/timetracker/datastorage/DataManager.java index 3351d22..79ffdaa 100644 --- a/app/src/main/java/org/hdm/app/timetracker/datastorage/DataManager.java +++ b/app/src/main/java/org/hdm/app/timetracker/datastorage/DataManager.java @@ -19,39 +19,20 @@ public class DataManager { private final String TAG = "DataManager"; // Instance from DaataManager private static DataManager instance = null; - - public HashMap imageMap = new HashMap<>(); - // In this Map are all the Activity Objects stored // It is used as DataBase from every Screen public LinkedHashMap activityMap = new LinkedHashMap<>(); - - // In this map is stored the activitys for Calender list public TreeMap> calenderMap = new TreeMap<>(); - - public LinkedHashMap portionMap = new LinkedHashMap<>(); public LinkedHashMap foodMap = new LinkedHashMap<>(); - - - - public ArrayList activeList = new ArrayList<>(); - - - public List logList = new ArrayList(); public String lastLog = ""; - - - - - public boolean createActivityObject(String name, ActivityObject activityObject) { if(name != null) { if(!activityMap.containsKey(name)) { @@ -67,12 +48,6 @@ public boolean createActivityObject(String name, ActivityObject activityObject) return false; } - - - - - - public boolean setActivityObject(ActivityObject activityObject) { String title = activityObject.title; @@ -90,8 +65,6 @@ public boolean setActivityObject(ActivityObject activityObject) { return false; } - - public ActivityObject getActivityObject(String name) { if(name != null && activityMap.containsKey(name)) { return activityMap.get(name); @@ -99,15 +72,10 @@ public ActivityObject getActivityObject(String name) { return null; } - public LinkedHashMap getObjectMap() { return activityMap; } - - - - public boolean createPortionObject(String name, ActivityObject activityObject) { if(name != null) { if(!portionMap.containsKey(name)) { @@ -151,11 +119,6 @@ public LinkedHashMap getPortionMap() { return portionMap; } - - - - - public boolean createFoodObject(String name, ActivityObject activityObject) { if(name != null) { if(!foodMap.containsKey(name)) { @@ -199,12 +162,6 @@ public LinkedHashMap getFoodMap() { return foodMap; } - - - - - - public boolean setCalenderMapEntry(String key, String activity) { // check if key is not null @@ -230,7 +187,6 @@ public boolean setCalenderMapEntry(String key, String activity) { } } - public boolean setActivityToCalendarList(String key, String activity) { // check if key is not null @@ -253,8 +209,6 @@ public boolean setActivityToCalendarList(String key, String activity) { return false; } - - public boolean deleteCalenderMapEntry(String key, String activity){ if(key != null && activity != null) { diff --git a/app/src/main/java/org/hdm/app/timetracker/screens/FragmentActivity.java b/app/src/main/java/org/hdm/app/timetracker/screens/FragmentActivity.java index 54dfc72..019073e 100644 --- a/app/src/main/java/org/hdm/app/timetracker/screens/FragmentActivity.java +++ b/app/src/main/java/org/hdm/app/timetracker/screens/FragmentActivity.java @@ -5,8 +5,14 @@ */ import android.app.FragmentManager; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Environment; import android.os.Handler; +import android.preference.Preference; +import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; @@ -14,9 +20,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import org.hdm.app.timetracker.R; import org.hdm.app.timetracker.datastorage.ActivityObject; +import org.hdm.app.timetracker.datastorage.ActivityObjectMap; import org.hdm.app.timetracker.datastorage.DataManager; import org.hdm.app.timetracker.datastorage.Stamp; import org.hdm.app.timetracker.dialogs.DialogPortionFragment; @@ -24,17 +32,33 @@ import org.hdm.app.timetracker.listener.ActivityListOnClickListener; import org.hdm.app.timetracker.adapter.ObjectListAdapter; import org.hdm.app.timetracker.adapter.ActiveListAdapter; +import org.hdm.app.timetracker.util.FileLoader; +import org.hdm.app.timetracker.util.MyJsonParser; import org.hdm.app.timetracker.util.Variables; import org.hdm.app.timetracker.util.View_Holder; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.Timer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static org.hdm.app.timetracker.util.Consts.*; +import android.view.View.OnClickListener; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; + /** * This fragment representing the front of the card. @@ -45,7 +69,6 @@ public class FragmentActivity extends BaseFragemnt implements private final String TAG = "FragmentActivity"; - private View view; private RecyclerView recyclerView; private RecyclerView recyclerView_activeData; @@ -64,6 +87,8 @@ public class FragmentActivity extends BaseFragemnt implements private int shortClickCounter = Variables.getInstance().shortClickCounter; private String currentShortClickTitle = ""; + private String countrySetting; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -71,10 +96,62 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, initMenu(view); initActiveList(); initObjectList(); + Button button = (Button) view.findViewById(R.id.test_button); + button.setOnClickListener(new OnClickListener() { + + public void onClick(View v) { + // TODO Auto-generated method stub + Log.i(TAG, "onClick: " + "Click Test button"); + Log.i(TAG, "Variable selected country: " + Variables.getInstance().country); + +// MyJsonParser jParser = new MyJsonParser(); +// FileLoader fileLoader = new FileLoader(); +// +// // Picture object for device +// Map map = dataManager.getInstance().getObjectMap(); +// for (ActivityObject obj : map.values()) { +// Log.i("FragmentActivity", " Selected country*: " + ":\t" + obj._id); +// } +// +// // Read custom country json file +// Log.i(TAG, "Read countries.json file to device"); +// File environment = Environment.getExternalStorageDirectory(); +// String folderPath = environment + "/" + CONFIG_FOLDER; +// String countryCustomFile = "countries.json"; +// String jsonString = fileLoader.readStringFromExternalFolder(folderPath, countryCustomFile); +// +// Pattern countryDataRegex = Pattern.compile("(\"([^\"]*)\").(\\[([^\"]*)\\])"); +// Matcher m = countryDataRegex.matcher(jsonString.replaceAll("\\s+","")); +// String selectedCountryValue = ""; +// while (m.find()) { +// if(m.group(2).equals("peru")) { +// Log.i(TAG, "Regex group 2: " + m.group(2)); +// Log.i(TAG, "Regex group 4: " + m.group(4)); +// selectedCountryValue = m.group(4); +// break; +// } +// } +// +// // Convert string to array +// Log.i(TAG, "selectedCountryValue: " + selectedCountryValue); +// String[] cPictureNumberList = selectedCountryValue.split(","); +// Log.i(TAG, "str size: " + cPictureNumberList.length); +// for (String pictureNumber : cPictureNumberList) { +// Log.i(TAG, "pictureNumber: " + pictureNumber); +// } +// +// // Check matched countries and activity +// Map map1 = dataManager.getInstance().getObjectMap(); +// for (ActivityObject obj : map1.values()) { +// String activityId = obj._id; +// boolean contains = Arrays.stream(cPictureNumberList).anyMatch(activityId::equals); +// Log.i(TAG, "Check " + activityId + " match: " + contains); +// } + } + }); return view; } - @Override public void onResume() { super.onResume(); @@ -93,14 +170,10 @@ public void onPause() { addActiveActivitiesToCalenderList(); } - /******************* * Life Cycle Ende ***********************/ - - private void initActiveList() { - activeAdapter = new ActiveListAdapter(dataManager.activeList); activeAdapter.setListener(this); recyclerView_activeData = (RecyclerView) view.findViewById(R.id.rv_active); @@ -113,8 +186,12 @@ private void initActiveList() { private void initObjectList() { - - objectAdapter = new ObjectListAdapter((List) new ArrayList<>(dataManager.getObjectMap().keySet())); +// Test + Log.i(TAG, "initObjectList for rv_list"); +// Get picture object list +// objectAdapter = new ObjectListAdapter((List) new ArrayList<>(dataManager.getObjectMap().keySet())); + this.countrySetting = Variables.getInstance().country.toLowerCase(); + objectAdapter = new ObjectListAdapter((List) new ArrayList<>(getCustomPictureList(this.countrySetting).keySet())); objectAdapter.setListener(this); recyclerView = (RecyclerView) view.findViewById(R.id.rv_list); recyclerView.setAdapter(objectAdapter); @@ -123,12 +200,9 @@ private void initObjectList() { var.listRows, StaggeredGridLayoutManager.VERTICAL)); } - /******************* * Init Ende ***********************/ - - // Listener from the ActiveActivityObjectList @Override public void didOnClickOnActiveListItem(String title, View_Holder holder) { @@ -141,7 +215,6 @@ public void didOnLongClickOnActiveListItem(String title, View_Holder holder) { handleLongClick(title, null); } - /** * Listener from the ActivityObjectList * Handled the click on an Activity @@ -157,7 +230,6 @@ public void didLongClickOnActivityListItem(String title, View_Holder view_holder handleLongClick(title, view_holder); } - private void handleShortClick(String title, View_Holder holder) { Log.d(TAG, "title1 " + title + " " + currentShortClickTitle + " " + shortClickCounter); @@ -181,7 +253,6 @@ private void handleShortClick(String title, View_Holder holder) { Log.d(TAG, "title4 " + object.externalWork); - if (object.externalWork != null) { if (object.externalWork.equals("Yes") && !object.activeState) { @@ -195,9 +266,7 @@ private void handleShortClick(String title, View_Holder holder) { } else if (object.externalWork.equals("Yes") && object.activeState) { handleLongClick(title, holder); } - } - } Handler handler = new Handler(); @@ -208,14 +277,9 @@ public void run() { currentShortClickTitle = ""; } }, var.shortClickCounterResetTime); - - } - private void handleLongClick(String title, View_Holder holder) { - - Log.d(TAG, " titllte " + title + " " + holder); // If edditable Mode true - than add activity to selectedTime in CalendearList @@ -468,7 +532,9 @@ private void editableMode() { // load edited List and update ActivityObjectListAdapter public void updateObjectList() { - objectAdapter.list = new ArrayList<>(dataManager.getObjectMap().keySet()); +// objectAdapter.list = new ArrayList<>(dataManager.getObjectMap().keySet()); + this.countrySetting = Variables.getInstance().country.toLowerCase(); + objectAdapter = new ObjectListAdapter((List) new ArrayList<>(getCustomPictureList(this.countrySetting).keySet())); objectAdapter.notifyDataSetChanged(); } @@ -495,4 +561,47 @@ private void addActiveActivitiesToCalenderList() { } } } + + private LinkedHashMap getCustomPictureList(String countrySetting) { + Log.i(TAG, "getCustomPictureList methods"); + MyJsonParser jParser = new MyJsonParser(); + FileLoader fileLoader = new FileLoader(); + String countryCustomFile = "countries.json"; + String folder = CONFIG_FOLDER; + LinkedHashMap pictureKeySet = new LinkedHashMap<>(); + + // Read custom country json file + Log.i(TAG, "Read countries.json file to device"); + String folderPath = Environment.getExternalStorageDirectory() + "/" + folder; + String jsonString = fileLoader.readStringFromExternalFolder(folderPath, countryCustomFile); + + Pattern countryDataRegex = Pattern.compile("(\"([^\"]*)\").(\\[([^\"]*)\\])"); + Matcher m = countryDataRegex.matcher(jsonString.replaceAll("\\s+","")); + String selectedCountryValue = ""; + while (m.find()) { + // Check with the selected country in setting + if(m.group(2).equals(countrySetting)) { + selectedCountryValue = m.group(4); + break; + } + } + + // Convert string to array + String[] cPictureNumberList = selectedCountryValue.split(","); + Log.i(TAG, "str size: " + cPictureNumberList.length); + + // Check matched countries and activity + Map map1 = dataManager.getInstance().getObjectMap(); + for (ActivityObject aObj : map1.values()) { + String activityId = aObj._id; + boolean contains = Arrays.stream(cPictureNumberList).anyMatch(activityId::equals); +// Log.i(TAG, "Check " + activityId + " match: " + contains); + // Add keyset to array list if contains + if(contains) { + Log.i(TAG, "Put id: " + activityId); + pictureKeySet.put(aObj.title, aObj); + } + } + return pictureKeySet; + } } \ No newline at end of file diff --git a/app/src/main/java/org/hdm/app/timetracker/screens/Settings.java b/app/src/main/java/org/hdm/app/timetracker/screens/Settings.java index 1807c3b..1f5400b 100644 --- a/app/src/main/java/org/hdm/app/timetracker/screens/Settings.java +++ b/app/src/main/java/org/hdm/app/timetracker/screens/Settings.java @@ -1,9 +1,13 @@ package org.hdm.app.timetracker.screens; import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; +import android.util.Log; import org.hdm.app.timetracker.R; import org.hdm.app.timetracker.listener.PreferenceListener; @@ -16,6 +20,7 @@ public class Settings extends PreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { private static final String TAG = "Settings"; + private static final String PREF_Country = "pref_key_country"; private PreferenceListener listener; private Activity mainActivity; @@ -28,7 +33,9 @@ public class Settings extends PreferenceFragment implements Preference.OnPrefere private Preference prefConnectionSend; private Preference prefConnectionIP; private Preference prefConnectionPort; + private Preference prefCountry; + private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener; @Override public void onAttach(Activity activity) { @@ -41,6 +48,19 @@ public void onAttach(Activity activity) { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); +// preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { +// @Override +// public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { +// Log.i(TAG, "onSharedPreferenceChanged key: " + key); +// if (key.equals(PREF_Country)) { +// Preference countryPref = findPreference(key); +// countryPref.setSummary(sharedPreferences.getString(key, "")); +// String countrySelection = sharedPreferences.getString(key, ""); +// Log.i("Show","Selected country " + countrySelection); +// } +// } +// }; + initXML(); initListener(); } @@ -57,11 +77,11 @@ private void initXML() { prefConnectionSend = getPreferenceManager().findPreference(getString(R.string.pref_key_connection_send)); prefConnectionIP = getPreferenceManager().findPreference(getString(R.string.pref_key_connection_ip)); prefConnectionPort = getPreferenceManager().findPreference(getString(R.string.pref_key_connection_port)); - +// Country + prefCountry = getPreferenceManager().findPreference(getString(R.string.pref_key_country)); } private void initListener() { - if (mainActivity != null) listener = (PreferenceListener) mainActivity; prefActivitiesReset.setOnPreferenceClickListener(this); @@ -73,12 +93,12 @@ private void initListener() { prefUserConsent.setOnPreferenceChangeListener(this); prefConnectionIP.setOnPreferenceChangeListener(this); prefConnectionPort.setOnPreferenceChangeListener(this); - +// Country + prefCountry.setOnPreferenceChangeListener(this); } private void initConditions() { - if (prefUserID != null) { prefUserID.setTitle("User ID: " + Variables.getInstance().user_ID); } @@ -107,12 +127,15 @@ private void initConditions() { @Override public void onResume() { super.onResume(); + getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(preferenceChangeListener); initConditions(); + updateCountrySummaryText(); } @Override public void onPause() { super.onPause(); + getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(preferenceChangeListener); } @@ -178,6 +201,20 @@ else if (preference.equals(prefConnectionPort)) { } } +// Country + else if (preference.equals(prefCountry)) { + if (newValue instanceof String) { + Variables.getInstance().country = (String) newValue; + updateCountrySummaryText(); + } + } + return true; } + + private void updateCountrySummaryText() { + Preference countryPref = findPreference(PREF_Country); + countryPref.setSummary(Variables.getInstance().country); + Log.i("Settings", "Select Country " + Variables.getInstance().country); + } } diff --git a/app/src/main/java/org/hdm/app/timetracker/util/Consts.java b/app/src/main/java/org/hdm/app/timetracker/util/Consts.java index f82624b..91240f0 100644 --- a/app/src/main/java/org/hdm/app/timetracker/util/Consts.java +++ b/app/src/main/java/org/hdm/app/timetracker/util/Consts.java @@ -16,7 +16,7 @@ public final class Consts { public final static String JSONFILE = "standard.json"; public final static String TEMPACTIVITIES = "temp-activities.json"; - public final static String PARENTPATH = "Rwandapp"; + public final static String PARENTPATH = "TimeTracker"; public final static String IMAGEPATH = "Images"; public final static String CONFIGPATH = "Config"; public final static String LOGPATH = "Logs"; @@ -30,7 +30,7 @@ public final class Consts { public final static String PROPERTIESFILE = "config.properties"; - public final static String MAIN_FOLDER = "RwandaApp/"; + public final static String MAIN_FOLDER = "TimeTracker/"; public final static String IMAGE_FOLDER = MAIN_FOLDER + "Images/"; public final static String CONFIG_FOLDER = MAIN_FOLDER + "Config/"; public final static String LOGS_FOLDER = MAIN_FOLDER + "Logs/"; diff --git a/app/src/main/java/org/hdm/app/timetracker/util/FileLoader.java b/app/src/main/java/org/hdm/app/timetracker/util/FileLoader.java index 3998371..73e0656 100644 --- a/app/src/main/java/org/hdm/app/timetracker/util/FileLoader.java +++ b/app/src/main/java/org/hdm/app/timetracker/util/FileLoader.java @@ -44,43 +44,37 @@ public class FileLoader { private Context context; private Properties properties; + private String fileName = "activity.json"; + private String countryCustomFile = "countries.json"; /************************** * Constructor *************************/ + public FileLoader() {} public FileLoader(MainActivity mainActivity) { context = mainActivity; } - /************************** * Init File Prozess *************************/ public void initFiles() { - - initFolder(); initConfiguration(); initJson(); - } - public void initFolder() { - createExternalFolder(MAIN_FOLDER); createExternalFolder(IMAGE_FOLDER); createExternalFolder(CONFIG_FOLDER); createExternalFolder(LOGS_FOLDER); } - public void initConfiguration() { - String path = enviroment + "/" + CONFIG_FOLDER; - if (!isExternalFileExists(path + PROPERTIESFILE)) { copyFileFromAssetToExternal(PROPERTIESFILE, path); } @@ -122,7 +116,6 @@ public void initConfiguration() { } if (properties.get("listRows") != null) { - try { int value = Integer.parseInt((String) properties.get("listRows")); Variables.getInstance().listRows = value; @@ -130,28 +123,24 @@ public void initConfiguration() { e.printStackTrace(); } } - - } - private void initJson() { - String path = enviroment + "/" + CONFIG_FOLDER; // Copy all Json files from Intern to External Folder if they not exist - String fileName = "activity.json"; - if (!isExternalFileExists(path + fileName)) { - copyFileFromAssetToExternal(fileName, path); + if (!isExternalFileExists(path + this.fileName)) { + copyFileFromAssetToExternal(this.fileName, path); } - loadActivityObjects(ACTIVITIES, path, fileName); - loadActivityObjects(PORTIONS, path, fileName); - loadActivityObjects(FOOD, path, fileName); - - + if (!isExternalFileExists(path + this.countryCustomFile)) { + copyFileFromAssetToExternal(this.countryCustomFile, path); + Log.i(TAG, "Copied " + this.countryCustomFile + " file to device"); + } + loadActivityObjects(ACTIVITIES, path, this.fileName); + loadActivityObjects(PORTIONS, path, this.fileName); + loadActivityObjects(FOOD, path, this.fileName); } - /************************** * Assets *************************/ @@ -180,18 +169,14 @@ public String readFromAssets(Context context, String filename) { return sb.toString(); } - - private String readStringFromExternalFolder(String folderPath, String fileName) { - + public String readStringFromExternalFolder(String folderPath, String fileName) { if (!isExternalFileExists(folderPath + fileName)) return null; - BufferedReader reader; StringBuilder sb; String mLine; File file = new File(folderPath, fileName); try { - FileInputStream fileInputStream = new FileInputStream(file); reader = new BufferedReader( new InputStreamReader(fileInputStream)); @@ -207,12 +192,9 @@ private String readStringFromExternalFolder(String folderPath, String fileName) return null; } return sb.toString(); - } - public boolean copyFileFromAssetToExternal(String fileName, String path) { - if (fileName != null && path != null) { InputStream in = null; OutputStream out = null; @@ -247,7 +229,6 @@ public boolean copyFileFromAssetToExternal(String fileName, String path) { return true; } - public boolean CopyImagesFromResourceToExternal(int[] resources) { if (resources.length != 0) { @@ -272,14 +253,12 @@ public boolean CopyImagesFromResourceToExternal(int[] resources) { return false; } - public Drawable getDrawableFromPath(String filePath) { Bitmap bitmap = BitmapFactory.decodeFile(filePath); //Here you can make logic for decode bitmap for ignore oom error. return new BitmapDrawable(bitmap); } - /************************** * Create External Folder *************************/ @@ -315,14 +294,10 @@ public String deleteExternalFolder(String folderName) { } - /************************** * Property File *************************/ - - public Properties getPropertiesFromAssets(String file) { - properties = new Properties(); try { @@ -336,7 +311,6 @@ public Properties getPropertiesFromAssets(String file) { return properties; } - public Properties getPropertiesFromExternal(String file) { @@ -359,7 +333,6 @@ public Properties getPropertiesFromExternal(String file) { // Load Content public void loadActivityObjects(String object, String folderPath, String fileName) { - BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ALPHA_8; options.inSampleSize = 2; //reduce quality @@ -372,10 +345,8 @@ public void loadActivityObjects(String object, String folderPath, String fileNam copyFileFromAssetToExternal(fileName, folderPath); } - if (DEBUGMODE) Log.d(TAG, "loadActivityObjects " + folderPath + fileName); - - + // Read out JsonFile from External Folder String jsonString = readStringFromExternalFolder(folderPath, fileName); if (DEBUGMODE) Log.d(TAG, "jasonString " + jsonString); @@ -383,17 +354,15 @@ public void loadActivityObjects(String object, String folderPath, String fileNam MyJsonParser jParser = new MyJsonParser(); ArrayList list = jParser.createObjectFromJson(object, jsonString); - if (list == null) { jsonString = readFromAssets(context, "activity.json"); list = jParser.createObjectFromJson(object, jsonString); } - String imgPath = enviroment.toString() + "/" + IMAGE_FOLDER; if (list != null) { - + Log.i(TAG, "actitiy.json List size: " + list.size()); for (int i = 0; i < list.size(); i++) { ActivityObject activityObject = list.get(i); @@ -437,17 +406,9 @@ public void loadActivityObjects(String object, String folderPath, String fileNam } } - - - - - - /************************** * File Permission Check *************************/ - - public boolean isExternalStorageWritable() { return (Environment.MEDIA_MOUNTED.equals(state)); } @@ -459,7 +420,6 @@ public boolean isExternalFileExists(String filePath) { return false; } - private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; @@ -468,11 +428,7 @@ private void copyFile(InputStream in, OutputStream out) throws IOException { } } - - - public void saveLogsOnExternal(String fileName) { - // MyJsonParser parser = new MyJsonParser(); // String logFile = parser.createLogJsonFromActivityObjects(); @@ -484,12 +440,7 @@ public void saveLogsOnExternal(String fileName) { Log.d(TAG, "logFile " + s); } - - - - private void writeStringOnExternal(String stringFile, String fileName, String path) { - if (stringFile != null && fileName != null && path != null) { File f = new File(path); @@ -497,7 +448,6 @@ private void writeStringOnExternal(String stringFile, String fileName, String pa initFolder(); } - File file = new File(path, fileName); FileOutputStream stream = null; diff --git a/app/src/main/java/org/hdm/app/timetracker/util/MyJsonParser.java b/app/src/main/java/org/hdm/app/timetracker/util/MyJsonParser.java index 08b4b59..4d24803 100644 --- a/app/src/main/java/org/hdm/app/timetracker/util/MyJsonParser.java +++ b/app/src/main/java/org/hdm/app/timetracker/util/MyJsonParser.java @@ -22,27 +22,23 @@ public MyJsonParser() {} public ArrayList createObjectFromJson(String objects, String jsonString) { - if(jsonString != null && objects != null) { - - - ObjectMapper objectMapper = new ObjectMapper(); - - try { - // Json String Input -// JsonParser jp = jsonFactory.createJsonParser(jsonString); - Log.d(TAG,"string " + jsonString.toString()); - ActivityObjectMap activityObjectMap = objectMapper.readValue(jsonString, ActivityObjectMap.class); - ArrayList arrayList = activityObjectMap.get(objects); - ActivityObject a =(ActivityObject) arrayList.get(1); - Log.d(TAG,"object " + a.title + " done"); - return arrayList; - } catch (JsonParseException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - + ObjectMapper objectMapper = new ObjectMapper(); + + try { + // Json String Input + // JsonParser jp = jsonFactory.createJsonParser(jsonString); + Log.d(TAG,"string " + jsonString.toString()); + ActivityObjectMap activityObjectMap = objectMapper.readValue(jsonString, ActivityObjectMap.class); + ArrayList arrayList = activityObjectMap.get(objects); + ActivityObject a =(ActivityObject) arrayList.get(1); + Log.d(TAG,"object " + a.title + " done"); + return arrayList; + } catch (JsonParseException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } } return null; } diff --git a/app/src/main/java/org/hdm/app/timetracker/util/Variables.java b/app/src/main/java/org/hdm/app/timetracker/util/Variables.java index 24796d6..5a847a1 100644 --- a/app/src/main/java/org/hdm/app/timetracker/util/Variables.java +++ b/app/src/main/java/org/hdm/app/timetracker/util/Variables.java @@ -172,7 +172,6 @@ public class Variables { public int shortClickCounter = 3; public long shortClickCounterResetTime = 4000; - /** * Status if Smartphone is connected to server */ @@ -188,6 +187,10 @@ public class Variables { public Date secondDay; public Date thirdDay; + /** + * Variable for selected country + */ + public String country = ""; /*********** * Singelton pattern diff --git a/app/src/main/res/layout/fragment_activitys.xml b/app/src/main/res/layout/fragment_activitys.xml index 6fd0d7c..06f7044 100644 --- a/app/src/main/res/layout/fragment_activitys.xml +++ b/app/src/main/res/layout/fragment_activitys.xml @@ -3,6 +3,12 @@ android:layout_height="match_parent" android:orientation="vertical"> +