diff --git a/RapidFTR-Android/res/drawable/bgbtnphoto.9.png b/RapidFTR-Android/res/drawable/bgbtnphoto.9.png
new file mode 100644
index 00000000..1008de0e
Binary files /dev/null and b/RapidFTR-Android/res/drawable/bgbtnphoto.9.png differ
diff --git a/RapidFTR-Android/res/drawable/bgbtnphotohover.9.png b/RapidFTR-Android/res/drawable/bgbtnphotohover.9.png
new file mode 100644
index 00000000..4dcd0034
Binary files /dev/null and b/RapidFTR-Android/res/drawable/bgbtnphotohover.9.png differ
diff --git a/RapidFTR-Android/res/drawable/camera_button.xml b/RapidFTR-Android/res/drawable/camera_button.xml
new file mode 100644
index 00000000..600aeec9
--- /dev/null
+++ b/RapidFTR-Android/res/drawable/camera_button.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RapidFTR-Android/res/layout/form_photo_upload_box.xml b/RapidFTR-Android/res/layout/form_photo_upload_box.xml
index e3e0bc17..6b09c5ad 100644
--- a/RapidFTR-Android/res/layout/form_photo_upload_box.xml
+++ b/RapidFTR-Android/res/layout/form_photo_upload_box.xml
@@ -11,11 +11,13 @@
+
+
diff --git a/RapidFTR-Android/res/values/strings.xml b/RapidFTR-Android/res/values/strings.xml
index 1e3f7772..aee60829 100644
--- a/RapidFTR-Android/res/values/strings.xml
+++ b/RapidFTR-Android/res/values/strings.xml
@@ -5,6 +5,8 @@
Log In
Log Out
Records are still being sychronised. Logging out now will cancel this process, are you sure you want to log out?
+ Your session is not active on the server, Please logout and login again
+
You have been logged out successfully.
Change URL
Register Child
@@ -91,6 +93,10 @@
This is an audio upload box
Info
+ Sort by
+ Sort by
+ Name
+ Recently Updated
RapidFTR is supported in the following languages:
Full name:
diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java b/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java
index 65a99764..3286dba7 100644
--- a/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java
+++ b/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java
@@ -37,6 +37,8 @@ public abstract class RapidFtrActivity extends FragmentActivity {
protected @Getter @Setter Menu menu;
+ int menuId = R.menu.options_menu;
+
private BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -131,7 +133,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (getContext().isLoggedIn()) {
- getMenuInflater().inflate(R.menu.options_menu, menu);
+ getMenuInflater().inflate(menuId, menu);
setMenu(menu);
toggleSync(menu);
setContextToSyncTask();
diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewAllChildrenActivity.java b/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewAllChildrenActivity.java
index 9c695697..625a954b 100644
--- a/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewAllChildrenActivity.java
+++ b/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewAllChildrenActivity.java
@@ -1,27 +1,92 @@
package com.rapidftr.activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
+import android.view.MenuItem;
import android.widget.ListView;
import com.rapidftr.R;
import com.rapidftr.adapter.ChildViewAdapter;
import com.rapidftr.model.Child;
import com.rapidftr.repository.ChildRepository;
import lombok.Cleanup;
+import lombok.Getter;
+import lombok.Setter;
import org.json.JSONException;
+import java.sql.Timestamp;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
public class ViewAllChildrenActivity extends RapidFtrActivity {
+ @Getter @Setter List children;
+ @Getter @Setter ChildViewAdapter childViewAdapter;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_all_children);
- listView(getChildren());
+ menuId = R.menu.view_children_menu;
+ this.children = getChildren();
+ listView();
}
-
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.sort_by) {
+ showSortOptions();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void showSortOptions() {
+ DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener(){
+
+ @Override
+ public void onClick(DialogInterface dialogInterface, int item) {
+ switch (item){
+ case 0:
+ sortChildrenByName();
+ break;
+ case 1:
+ sortChildrenByRecentUpdate();
+ break;
+ }
+ }
+ };
+ AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
+ alertDialog.setTitle(getString(R.string.sort_by_options)).setCancelable(false);
+ alertDialog.setItems(new String[]{getString(R.string.sort_by_name), getString(R.string.sort_by_recent_update)}, listener);
+ alertDialog.create().show();
+ }
+
+ public void sortChildrenByRecentUpdate() {
+ Collections.sort(this.children, new Comparator() {
+ @Override
+ public int compare(Child child, Child child1) {
+ Timestamp childLastUpdateAt = Timestamp.valueOf(child.getLastUpdatedAt());
+ Timestamp child1LastUpdateAt = Timestamp.valueOf(child1.getLastUpdatedAt());
+ return child1LastUpdateAt.compareTo(childLastUpdateAt);
+ }
+ });
+ childViewAdapter.notifyDataSetChanged();
+ }
+
+ public void sortChildrenByName() {
+ Collections.sort(this.children, new Comparator() {
+ @Override
+ public int compare(Child child, Child child1) {
+ return child.getName().compareTo(child1.getName());
+ }
+ });
+ childViewAdapter.notifyDataSetChanged();
+ }
+
private List getChildren()
{
List children = new ArrayList();
@@ -35,10 +100,11 @@ private List getChildren()
return children;
}
- private void listView(List children) {
- ChildViewAdapter childViewAdapter = new ChildViewAdapter(this, R.layout.row_child, children);
+ private void listView() {
+ childViewAdapter = new ChildViewAdapter(this, R.layout.row_child, this.children);
+
ListView childListView = (ListView) findViewById(R.id.child_list);
- if (children.isEmpty()) {
+ if (this.children.isEmpty()) {
childListView.setEmptyView(findViewById(R.id.no_child_view));
}
childListView.setAdapter(childViewAdapter);
diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/adapter/ImageAdapter.java b/RapidFTR-Android/src/main/java/com/rapidftr/adapter/ImageAdapter.java
index 1b0fa247..69d69145 100644
--- a/RapidFTR-Android/src/main/java/com/rapidftr/adapter/ImageAdapter.java
+++ b/RapidFTR-Android/src/main/java/com/rapidftr/adapter/ImageAdapter.java
@@ -15,7 +15,9 @@
public class ImageAdapter extends BaseAdapter {
- private final Child child;
+ public static final int NO_PADDING = 0;
+
+ private final Child child;
private final boolean enabled;
private final PhotoCaptureHelper photoCaptureHelper;
private final Context context;
@@ -53,7 +55,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
try {
bitmap = photoCaptureHelper.getThumbnailOrDefault(photoKeys.get(position).toString());
imageView = new ImageView(context);
- imageView.setPadding(0,0,0,0);
+ imageView.setPadding(NO_PADDING, NO_PADDING, NO_PADDING, NO_PADDING);
imageView.setAdjustViewBounds(true);
imageView.setImageBitmap(bitmap);
} catch (JSONException e) {
diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/model/Child.java b/RapidFTR-Android/src/main/java/com/rapidftr/model/Child.java
index 460745ce..9bb23639 100644
--- a/RapidFTR-Android/src/main/java/com/rapidftr/model/Child.java
+++ b/RapidFTR-Android/src/main/java/com/rapidftr/model/Child.java
@@ -170,7 +170,7 @@ protected void setCreatedAt(String createdAt) throws JSONException {
put(created_at.getColumnName(), createdAt);
}
- public String getLastUpdatedAt() throws JSONException {
+ public String getLastUpdatedAt(){
return optString(last_updated_at.getColumnName(), null);
}
diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java b/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java
index f486e2a4..5d6b6b1b 100644
--- a/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java
+++ b/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java
@@ -15,6 +15,7 @@
import com.rapidftr.utils.RapidFtrDateTime;
import com.rapidftr.utils.http.FluentRequest;
import com.rapidftr.utils.http.FluentResponse;
+import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.codehaus.jackson.map.ObjectMapper;
import org.json.JSONArray;
@@ -251,9 +252,9 @@ public HttpResponse getAudio(Child child) throws IOException {
}
- public HashMap getAllIdsAndRevs() throws IOException {
+ public HashMap getAllIdsAndRevs() throws IOException, HttpException {
final ObjectMapper objectMapper = new ObjectMapper();
- HttpResponse response = fluentRequest.path("/children-ids").context(context).get();
+ HttpResponse response = fluentRequest.path("/children-ids").context(context).get().ensureSuccess();
List