Skip to content
This repository has been archived by the owner on Apr 9, 2021. It is now read-only.

Crash fix due to Instances table updated in Collect #301

Merged
merged 1 commit into from
Aug 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,6 @@ public List<Instance> getInstancesFromCursor(Cursor cursor) {
int jrVersionColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.JR_VERSION);
int statusColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.STATUS);
int lastStatusChangeDateColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.LAST_STATUS_CHANGE_DATE);
int displaySubtextColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DISPLAY_SUBTEXT);
int deletedDateColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DELETED_DATE);

int databaseIdIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns._ID);
Expand All @@ -326,7 +325,6 @@ public List<Instance> getInstancesFromCursor(Cursor cursor) {
.jrVersion(cursor.getString(jrVersionColumnIndex))
.status(cursor.getString(statusColumnIndex))
.lastStatusChangeDate(cursor.getLong(lastStatusChangeDateColumnIndex))
.displaySubtext(cursor.getString(displaySubtextColumnIndex))
.deletedDate(cursor.getLong(deletedDateColumnIndex))
.databaseId(cursor.getLong(databaseIdIndex))
.build();
Expand All @@ -353,7 +351,6 @@ public HashMap<Long, Instance> getMapFromCursor(Cursor cursor) {
int jrVersionColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.JR_VERSION);
int statusColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.STATUS);
int lastStatusChangeDateColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.LAST_STATUS_CHANGE_DATE);
int displaySubtextColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DISPLAY_SUBTEXT);
int deletedDateColumnIndex = cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DELETED_DATE);

Instance instance = new Instance.Builder()
Expand All @@ -365,7 +362,6 @@ public HashMap<Long, Instance> getMapFromCursor(Cursor cursor) {
.jrVersion(cursor.getString(jrVersionColumnIndex))
.status(cursor.getString(statusColumnIndex))
.lastStatusChangeDate(cursor.getLong(lastStatusChangeDateColumnIndex))
.displaySubtext(cursor.getString(displaySubtextColumnIndex))
.deletedDate(cursor.getLong(deletedDateColumnIndex))
.build();

Expand All @@ -381,7 +377,7 @@ public HashMap<Long, Instance> getMapFromCursor(Cursor cursor) {
/**
* Returns the values of an instance as a ContentValues object for use with
* {@link #saveInstance(ContentValues)} or {@link #updateInstance(ContentValues, String, String[])}
* <p>
*
* Does NOT include the database ID.
*/
public ContentValues getValuesFromInstanceObject(Instance instance) {
Expand All @@ -394,7 +390,6 @@ public ContentValues getValuesFromInstanceObject(Instance instance) {
values.put(InstanceProviderAPI.InstanceColumns.JR_VERSION, instance.getJrVersion());
values.put(InstanceProviderAPI.InstanceColumns.STATUS, instance.getStatus());
values.put(InstanceProviderAPI.InstanceColumns.LAST_STATUS_CHANGE_DATE, instance.getLastStatusChangeDate());
values.put(InstanceProviderAPI.InstanceColumns.DISPLAY_SUBTEXT, instance.getDisplaySubtext());
values.put(InstanceProviderAPI.InstanceColumns.DELETED_DATE, instance.getDeletedDate());

return values;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.odk.collect.android.dto;

public class Instance {
public final class Instance {
private final String displayName;
private final String submissionUri;
private final String canEditWhenComplete;
Expand All @@ -25,7 +25,6 @@ public class Instance {
private final String jrVersion;
private final String status;
private final Long lastStatusChangeDate;
private final String displaySubtext;
private final Long deletedDate;

private final Long databaseId;
Expand All @@ -39,7 +38,6 @@ private Instance(Builder builder) {
jrVersion = builder.jrVersion;
status = builder.status;
lastStatusChangeDate = builder.lastStatusChangeDate;
displaySubtext = builder.displaySubtext;
deletedDate = builder.deletedDate;

databaseId = builder.databaseId;
Expand All @@ -54,7 +52,6 @@ public static class Builder {
private String jrVersion;
private String status;
private Long lastStatusChangeDate;
private String displaySubtext;
private Long deletedDate;

private Long databaseId;
Expand Down Expand Up @@ -99,11 +96,6 @@ public Builder lastStatusChangeDate(Long lastStatusChangeDate) {
return this;
}

public Builder displaySubtext(String displaySubtext) {
this.displaySubtext = displaySubtext;
return this;
}

public Builder deletedDate(Long deletedDate) {
this.deletedDate = deletedDate;
return this;
Expand Down Expand Up @@ -151,15 +143,22 @@ public Long getLastStatusChangeDate() {
return lastStatusChangeDate;
}

public String getDisplaySubtext() {
return displaySubtext;
}

public Long getDeletedDate() {
return deletedDate;
}

public Long getDatabaseId() {
return databaseId;
}
}

@Override
public boolean equals(Object other) {
return other == this || other instanceof Instance
&& this.instanceFilePath.equals(((Instance) other).instanceFilePath);
}

@Override
public int hashCode() {
return instanceFilePath.hashCode();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@
import android.net.Uri;
import android.provider.BaseColumns;

/**
* Convenience definitions for NotePadProvider
*/
public final class InstanceProviderAPI {
public static final String AUTHORITY = "org.odk.collect.android.provider.odk.instances";

Expand All @@ -35,9 +32,6 @@ private InstanceProviderAPI() {
public static final String STATUS_SUBMITTED = "submitted";
public static final String STATUS_SUBMISSION_FAILED = "submissionFailed";

/**
* Notes table
*/
public static final class InstanceColumns implements BaseColumns {
// This class cannot be instantiated
private InstanceColumns() {
Expand All @@ -47,26 +41,15 @@ private InstanceColumns() {
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.odk.instance";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.odk.instance";

// These are the only things needed for an insert
// instance column names
public static final String DISPLAY_NAME = "displayName";
public static final String SUBMISSION_URI = "submissionUri";
public static final String INSTANCE_FILE_PATH = "instanceFilePath";
public static final String JR_FORM_ID = "jrFormId";
public static final String JR_VERSION = "jrVersion";
//public static final String FORM_ID = "formId";

// these are generated for you (but you can insert something else if you want)
public static final String STATUS = "status";
public static final String CAN_EDIT_WHEN_COMPLETE = "canEditWhenComplete";
public static final String LAST_STATUS_CHANGE_DATE = "date";
public static final String DISPLAY_SUBTEXT = "displaySubtext";
public static final String DELETED_DATE = "deletedDate";
//public static final String DISPLAY_SUB_SUBTEXT = "displaySubSubtext";

// public static final String DEFAULT_SORT_ORDER = "modified DESC";
// public static final String TITLE = "title";
// public static final String NOTE = "note";
// public static final String CREATED_DATE = "created";
// public static final String MODIFIED_DATE = "modified";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@
import org.odk.collect.android.provider.InstanceProviderAPI;
import org.odk.share.R;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Locale;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import timber.log.Timber;

/**
* Created by laksh on 5/20/2018.
Expand Down Expand Up @@ -54,14 +58,47 @@ public void onClick(View v) {
}
});
holder.title.setText(cursor.getString(cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DISPLAY_NAME)));
holder.subtitle.setText(cursor.getString(cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns.DISPLAY_SUBTEXT)));

long lastStatusChangeDate = getCursor().getLong(getCursor().getColumnIndex(InstanceProviderAPI.InstanceColumns.LAST_STATUS_CHANGE_DATE));
String status = getCursor().getString(getCursor().getColumnIndex(InstanceProviderAPI.InstanceColumns.STATUS));
String subtext = getDisplaySubtext(context, status, new Date(lastStatusChangeDate));

holder.subtitle.setText(subtext);
long id = cursor.getLong(cursor.getColumnIndex(InstanceProviderAPI.InstanceColumns._ID));
holder.checkBox.setChecked(selectedInstances.contains(id));
holder.reviewedForms.setVisibility(View.GONE);
holder.unReviewedForms.setVisibility(View.GONE);

}

public static String getDisplaySubtext(Context context, String state, Date date) {
try {
if (state == null) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can those if-else replaced by switch-case sentences?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't want these to be changed because I've copied these things exactly from ODK-Collect code so that if it gets changed in future then we would be able to identify things easily.

return new SimpleDateFormat(context.getString(R.string.added_on_date_at_time),
Locale.getDefault()).format(date);
} else if (InstanceProviderAPI.STATUS_INCOMPLETE.equalsIgnoreCase(state)) {
return new SimpleDateFormat(context.getString(R.string.saved_on_date_at_time),
Locale.getDefault()).format(date);
} else if (InstanceProviderAPI.STATUS_COMPLETE.equalsIgnoreCase(state)) {
return new SimpleDateFormat(context.getString(R.string.finalized_on_date_at_time),
Locale.getDefault()).format(date);
} else if (InstanceProviderAPI.STATUS_SUBMITTED.equalsIgnoreCase(state)) {
return new SimpleDateFormat(context.getString(R.string.sent_on_date_at_time),
Locale.getDefault()).format(date);
} else if (InstanceProviderAPI.STATUS_SUBMISSION_FAILED.equalsIgnoreCase(state)) {
return new SimpleDateFormat(
context.getString(R.string.sending_failed_on_date_at_time),
Locale.getDefault()).format(date);
} else {
return new SimpleDateFormat(context.getString(R.string.added_on_date_at_time),
Locale.getDefault()).format(date);
}
} catch (IllegalArgumentException e) {
Timber.e(e);
return "";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return null.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think returning empty string is similar to null value returned.
Because if you call textView.setText(null) and textView.setText(""), they both resets the previous string and sets nothing on the textView.

}
}

@Override
public int getItemCount() {
return !cursor.isClosed() ? cursor.getCount() : 0;
Expand Down
6 changes: 6 additions & 0 deletions skunkworks_crow/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -168,4 +168,10 @@
<string name="permission_open_location_info">Skunkworks-crow app requires location permission to access your Bluetooth. Please allow location permission from your app settings.</string>
<string name="permission_open_storage_info">Skunkworks-crow app requires storage permission to access ODK database. Please allow that from your app settings.</string>
<string name="permission_open_info_button">Open Settings</string>

<string name="added_on_date_at_time">\'Added on\' EEE, MMM dd, yyyy \'at\' HH:mm</string> <!-- http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html -->
<string name="saved_on_date_at_time">\'Saved on\' EEE, MMM dd, yyyy \'at\' HH:mm</string> <!-- http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html -->
<string name="finalized_on_date_at_time">\'Finalized on\' EEE, MMM dd, yyyy \'at\' HH:mm</string> <!-- http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html -->
<string name="sent_on_date_at_time">\'Sent on\' EEE, MMM dd, yyyy \'at\' HH:mm</string> <!-- http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html -->
<string name="sending_failed_on_date_at_time">\'Sending failed on\' EEE, MMM dd, yyyy \'at\' HH:mm</string> <!-- http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html -->
</resources>