Skip to content

Commit

Permalink
Merge pull request #132 in MOB/climate-android from ~MANAV.SINGHAL/cl…
Browse files Browse the repository at this point in the history
…imate-android:basic-634 to master

Squashed commit of the following:

commit 42519eb01983362a4f1a405fa56c90e2a941e3ec
Author: Manav Singhal <manav.singhal@climate.com>
Date:   Tue Feb 24 16:16:18 2015 -0800

    added recent activity on field summary page
  • Loading branch information
Manav Singhal committed Feb 25, 2015
1 parent 5b29eef commit 3b89eef
Show file tree
Hide file tree
Showing 15 changed files with 277 additions and 53 deletions.
Expand Up @@ -9,7 +9,6 @@
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
Expand Down Expand Up @@ -84,8 +83,8 @@
</content>
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="play-services-4.3.23" level="project" />
<orderEntry type="library" exported="" name="support-v4-19.0.1" level="project" />
<orderEntry type="library" exported="" name="play-services-4.3.23" level="project" />
</component>
</module>

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="ClimateGrowersProject" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
Expand Down
61 changes: 30 additions & 31 deletions ClimateGrowersProject/ClimateGrowersApp/ClimateGrowersApp.iml
Expand Up @@ -9,7 +9,6 @@
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
Expand Down Expand Up @@ -76,46 +75,46 @@
</content>
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="okhttp-urlconnection-2.0.0" level="project" />
<orderEntry type="library" exported="" name="lolay-logjam-2" level="project" />
<orderEntry type="library" exported="" name="essentials-logger" level="project" />
<orderEntry type="library" exported="" name="play-services-6.5.87" level="project" />
<orderEntry type="library" exported="" name="notifications-android-1.3.11" level="project" />
<orderEntry type="library" exported="" name="http-request-5.4" level="project" />
<orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
<orderEntry type="library" exported="" name="okio-1.0.0" level="project" />
<orderEntry type="library" exported="" name="commons-lang-2.6" level="project" />
<orderEntry type="library" exported="" name="multidex-1.0.0" level="project" />
<orderEntry type="library" exported="" name="ClimateAuthLib-release-unspecified" level="project" />
<orderEntry type="library" exported="" name="lolay-erred-2" level="project" />
<orderEntry type="library" exported="" name="jackson-core-asl-1.9.13" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" />
<orderEntry type="library" exported="" name="lolay-strands-2" level="project" />
<orderEntry type="library" exported="" name="retrofit-1.6.1" level="project" />
<orderEntry type="library" exported="" name="essentials-loader" level="project" />
<orderEntry type="library" exported="" name="okhttp-2.0.0" level="project" />
<orderEntry type="library" exported="" name="FieldHealthLib-release-unspecified" level="project" />
<orderEntry type="library" exported="" name="commons-io-1.3.2" level="project" />
<orderEntry type="library" exported="" name="analytics-android-0.6.11" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-21.0.0" level="project" />
<orderEntry type="library" exported="" name="httpclient-android-4.3.3" level="project" />
<orderEntry type="library" exported="" name="httpclientandroidlib-1.2.1" level="project" />
<orderEntry type="library" exported="" name="library-1.2.3" level="project" />
<orderEntry type="library" exported="" name="eventbus-2.4.0" level="project" />
<orderEntry type="library" exported="" name="lolay-investigo-10" level="project" />
<orderEntry type="library" exported="" name="support-v13-21.0.0" level="project" />
<orderEntry type="library" exported="" name="volley" level="project" />
<orderEntry type="library" exported="" name="picasso-2.4.0" level="project" />
<orderEntry type="library" exported="" name="lolay-kat-5" level="project" />
<orderEntry type="library" exported="" name="library-0.4.0" level="project" />
<orderEntry type="library" exported="" name="jackson-mapper-asl-1.9.13" level="project" />
<orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
<orderEntry type="library" exported="" name="retrofit-1.6.1" level="project" />
<orderEntry type="library" exported="" name="http-request-5.4" level="project" />
<orderEntry type="library" exported="" name="play-services-6.5.87" level="project" />
<orderEntry type="library" exported="" name="commons-io-1.3.2" level="project" />
<orderEntry type="library" exported="" name="lolay-logjam-2" level="project" />
<orderEntry type="library" exported="" name="library-1.2.3" level="project" />
<orderEntry type="library" exported="" name="okhttp-2.0.0" level="project" />
<orderEntry type="library" exported="" name="httpclient-android-4.3.3" level="project" />
<orderEntry type="library" exported="" name="okio-1.0.0" level="project" />
<orderEntry type="library" exported="" name="library-0.9.9" level="project" />
<orderEntry type="library" exported="" name="library-0.4.0" level="project" />
<orderEntry type="library" exported="" name="volley" level="project" />
<orderEntry type="library" exported="" name="lolay-investigo-10" level="project" />
<orderEntry type="library" exported="" name="notifications-android-1.3.11" level="project" />
<orderEntry type="library" exported="" name="eventbus-2.4.0" level="project" />
<orderEntry type="library" exported="" name="httpclientandroidlib-1.2.1" level="project" />
<orderEntry type="library" exported="" name="lolay-strands-2" level="project" />
<orderEntry type="library" exported="" name="commons-lang-2.6" level="project" />
<orderEntry type="library" exported="" name="jackson-core-asl-1.9.13" level="project" />
<orderEntry type="library" exported="" name="essentials-loader" level="project" />
<orderEntry type="library" exported="" name="gson-2.3" level="project" />
<orderEntry type="library" exported="" name="picasso-2.4.0" level="project" />
<orderEntry type="library" exported="" name="support-v13-21.0.0" level="project" />
<orderEntry type="library" exported="" name="essentials-logger" level="project" />
<orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
<orderEntry type="library" exported="" name="ClimateAuthLib-release-unspecified" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" />
<orderEntry type="library" exported="" name="multidex-1.0.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-21.0.0" level="project" />
<orderEntry type="library" exported="" name="okhttp-urlconnection-2.0.0" level="project" />
<orderEntry type="module" module-name="MapTileAnimationLib" exported="" />
<orderEntry type="module" module-name="TwoWayViewLayouts" exported="" />
<orderEntry type="module" module-name="TwoWayViewCore" exported="" />
<orderEntry type="module" module-name="AndroidMapsExtensions" exported="" />
<orderEntry type="module" module-name="MapTileAnimationLib" exported="" />
</component>
</module>

Expand Up @@ -68,11 +68,13 @@ public View getView(int position, View convertView, ViewGroup parent) {
int iconId = R.drawable.ic_activity_planted;
if ("scouting".equals(activityType)) iconId = R.drawable.ic_activity_scouted;
holder.iconView.setImageResource(iconId);

if (FarmerEventSummary.TYPE_SCOUTING.equals(sum.getActivityType())) {
holder.eventTypeView.setText(getScoutingLabel(sum.getType()));
} else {
holder.eventTypeView.setText(getLabel(sum.getActivityType()));
}

holder.fieldName.setText(sum.getFieldName());
if (TextUtils.isEmpty(sum.getNote())) {
holder.summaryView.setVisibility(View.GONE);
Expand Down
Expand Up @@ -14,15 +14,23 @@
import com.climate.android.fieldhealth.ui.FhaMapActivity;
import com.climate.growers.android.R;
import com.climate.growers.android.biz.FetchDetailedFieldRequest;
import com.climate.growers.android.biz.FetchFarmerEventsSummariesRequest;
import com.climate.growers.android.managers.pojos.ClimateResponse;
import com.climate.growers.android.managers.pojos.DetailedField;
import com.climate.growers.android.managers.pojos.FarmerEventSummary;
import com.climate.growers.android.managers.pojos.FieldLazyDetails;
import com.climate.growers.android.renderers.ActivityModuleCard;
import com.climate.growers.android.renderers.FieldNameModuleCard;
import com.climate.growers.android.renderers.ForecastModuleCard;
import com.climate.growers.android.renderers.WeatherModuleCard;
import com.climate.growers.android.ui.content.FieldDetailsActivity;
import com.climate.growers.android.ui.scouting.EventSummaryActivity;
import com.google.android.gms.maps.MapView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ModuleLauncherAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Activity activity;
Expand All @@ -32,7 +40,8 @@ public class ModuleLauncherAdapter extends RecyclerView.Adapter<RecyclerView.Vie
private RequestQueue requestQueue;
private LayoutInflater inflater;
private DetailedField detailedField;
private boolean isLoadingDetailedField = false;
private FarmerEventSummary farmerEventSummary;
private boolean isLoadingDetailedField = false, isLoadingActivityField = false;

public ModuleLauncherAdapter(Activity activity, FieldLazyDetails lazyDetails,
long userId, RequestQueue requestQueue, MapView mapView) {
Expand All @@ -43,6 +52,7 @@ public ModuleLauncherAdapter(Activity activity, FieldLazyDetails lazyDetails,
this.mapView = mapView;
inflater = LayoutInflater.from(activity);
loadFieldDetails();
loadRecentActivity();
}

/*
Expand Down Expand Up @@ -72,6 +82,40 @@ public void onErrorResponse(VolleyError volleyError) {
requestQueue.add(r);
}

private void loadRecentActivity() {

FetchFarmerEventsSummariesRequest r = new FetchFarmerEventsSummariesRequest(activity, userId, 1);
r.setSucessListener(new Response.Listener<ClimateResponse<ArrayList<FarmerEventSummary>>>(){
public void onResponse(ClimateResponse<ArrayList<FarmerEventSummary>> events) {
if (events != null && events.getData() != null) {
Collections.sort(events.getData(), new DateSorter());
}
farmerEventSummary = events.getData().get(0);
isLoadingActivityField = false;
notifyDataSetChanged();
}
});
r.setErrorListener(new Response.ErrorListener(){
public void onErrorResponse(VolleyError volleyError) {
isLoadingActivityField = false;
notifyDataSetChanged();
}
});
r.setTag("recentActivityDetails");
isLoadingActivityField = true;
requestQueue.add(r);
}

private static class DateSorter implements Comparator<FarmerEventSummary> {
@Override
public int compare(FarmerEventSummary lhs, FarmerEventSummary rhs) {
if (rhs.getActivityDateDate() == null && lhs.getActivityDateDate() == null) return 0;
if (rhs.getActivityDateDate() == null) return 1;
if (lhs.getActivityDateDate() == null) return 1;
return rhs.getActivityDateDate().compareTo(lhs.getActivityDateDate());
}
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {
Expand All @@ -85,10 +129,13 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType
} else if (viewType == 3) {
View v = inflater.inflate(R.layout.renderer_module_picker_forecast, parent, false);
return new RecyclerView.ViewHolder(v){};
} else {
} else if (viewType == 4) {
View v = inflater.inflate(R.layout.renderer_module_picker_fha, parent, false);
return new FhaCardHolder(v){};
}
} else{
View v = inflater.inflate(R.layout.renderer_module_picker_activity, parent, false);
return new RecyclerView.ViewHolder(v){};
}
}

@Override
Expand Down Expand Up @@ -148,11 +195,23 @@ public void onClick(View v) {
fhaHolder.msg.setText(R.string.module_launcher_fha_msg_non_pro);
}
}
else if (position == 5){
ActivityModuleCard r = (ActivityModuleCard)holder.itemView;
r.updateLoadingStatus(isLoadingActivityField);
if (!isLoadingActivityField && farmerEventSummary != null){
r.setRecentActivity(farmerEventSummary);
}
r.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
activity.startActivity(EventSummaryActivity.createStartIntent(activity));
}
});
}
}

@Override
public int getItemCount() {
return 5;
return 6;
}

@Override
Expand Down
@@ -0,0 +1,88 @@
package com.climate.growers.android.renderers;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.climate.growers.android.R;
import com.climate.growers.android.managers.pojos.FarmerEventSummary;

import java.text.DateFormat;

public class ActivityModuleCard extends RelativeLayout {

private TextView eventType, dateLabel;
private ImageView icon;
private FarmerEventSummary eventData;
private View progressBar;
private DateFormat dateFormat;

public ActivityModuleCard(Context context, AttributeSet attrs) {
super(context, attrs);
}

public ActivityModuleCard(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
eventType = (TextView)findViewById(R.id.eventType);
dateLabel = (TextView)findViewById(R.id.dateLabel);
icon = (ImageView)findViewById(R.id.icon);
progressBar = findViewById(R.id.progressBar);
}

public void setRecentActivity(FarmerEventSummary farmerEventSummary) {
eventData = farmerEventSummary;
bindData();
}

private void bindData() {
if (eventData == null) {
eventType.setText("");
dateLabel.setText("");
icon.setImageResource(R.drawable.ic_activity_planted);
} else {

eventType.setText(getActivityString());
icon.setImageResource(R.drawable.ic_activity_planted);
if ("scouting".equals(eventData.getActivityType())) icon.setImageResource(R.drawable.ic_activity_scouted);
dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
String format = dateFormat.format(eventData.getActivityDateDate());
dateLabel.setText(format);
}
}

private String getActivityString(){

if (FarmerEventSummary.TYPE_HARVEST.equalsIgnoreCase(eventData.getActivityType())) {
return getContext().getString(R.string.title_activity_logging_harvesting).toUpperCase();
} else if (FarmerEventSummary.TYPE_NITROGEN.equalsIgnoreCase(eventData.getActivityType())) {
return getContext().getString(R.string.title_activity_logging_soil).toUpperCase();
} else if (FarmerEventSummary.TYPE_PEST.equalsIgnoreCase(eventData.getActivityType())) {
return getContext().getString(R.string.title_activity_logging_pest_mgt).toUpperCase();
} else if (FarmerEventSummary.TYPE_PLANTING.equalsIgnoreCase(eventData.getActivityType())) {
return (getContext().getString(R.string.title_activity_logging_planting).toUpperCase());
} else if (FarmerEventSummary.TYPE_TILLAGE.equalsIgnoreCase(eventData.getActivityType())) {
return (getContext().getString(R.string.title_activity_logging_tillage).toUpperCase());
} else if (FarmerEventSummary.TYPE_OTHER.equalsIgnoreCase(eventData.getActivityType())) {
return (getContext().getString(R.string.title_activity_logging_other).toUpperCase());
}

return null;
}

public void updateLoadingStatus(boolean showLoading) {
if (showLoading) {
progressBar.setVisibility(View.VISIBLE);
} else {
progressBar.setVisibility(View.GONE);
}
}

}
Expand Up @@ -6,25 +6,21 @@
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.climate.growers.android.R;
import com.climate.growers.android.managers.pojos.FieldLazyDetails;
import com.climate.growers.android.managers.pojos.Precipitation;
import com.climate.growers.android.utils.AnimationUtil;
import com.climate.growers.android.utils.AssetUtil;
import com.climate.growers.android.utils.PrecipUtil;
import com.therealjoshua.essentials.bitmaploader.binders.GroupViewBinder;

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class FieldStatRenderer extends RelativeLayout {

private ImageView map, windIcon;
private TextView fieldName, fieldLocation, degrees, weatherStatus;
private TextView minusPrecip, plusPrecip, windSpeed;
Expand Down
Expand Up @@ -183,7 +183,7 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
outRect.left = 20;
outRect.right = 20;
}
if (parent.getChildPosition(view) == 4) {
if (parent.getChildPosition(view) == 5) {
outRect.bottom = 20;
}
}
Expand Down

0 comments on commit 3b89eef

Please sign in to comment.