Skip to content

Commit

Permalink
Release 0.7.2
Browse files Browse the repository at this point in the history
Merge branch 'develop'
  • Loading branch information
ifoche committed May 4, 2018
2 parents 2eeab86 + a938ea2 commit 23be438
Show file tree
Hide file tree
Showing 16 changed files with 182 additions and 18 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,21 @@ Android application for DHIS2 which provides basic dashboard functionality.
Get the APK from the release page:

https://github.com/dhis2/dhis2-android-dashboard/releases

# Testing
If you want to try the application out with a demo database, you can use the following:
- Server: https://play.dhis2.org/demo
- Username: admin
- Password: district

# How to Download and Set up the development environment in Android Studio

Currently, the compatibility is guaranteed with 2.27, 2.28 and 2.29 servers, use develop branch in dhis2-android-dashboard repository.

When cloning from zero, it's strongly recommended to do it as follows:

```
git clone -b develop [email protected]:dhis2/dhis2-android-dashboard.git
```

Then open Android Studio, select "File" --> "Open", and then select the downloaded folder
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.hisp.dhis.android.dashboard.api.models.DashboardItem$Table;
import org.hisp.dhis.android.dashboard.api.models.DashboardItemContent;
import org.hisp.dhis.android.dashboard.api.models.DashboardItemContent$Table;
import org.hisp.dhis.android.dashboard.api.models.SystemInfo;
import org.hisp.dhis.android.dashboard.api.models.meta.DbOperation;
import org.hisp.dhis.android.dashboard.api.models.meta.State;
import org.hisp.dhis.android.dashboard.api.network.APIException;
Expand Down Expand Up @@ -135,7 +136,9 @@ public void syncDashboards(SyncStrategy syncStrategy) throws APIException {
private void getDashboardDataFromServer(SyncStrategy syncStrategy) throws APIException {
DateTime lastUpdated = DateTimeManager.getInstance()
.getLastUpdated(ResourceType.DASHBOARDS);
DateTime serverDateTime = mDhisApi.getSystemInfo()
SystemInfo systemInfo = mDhisApi.getSystemInfo();
systemInfo.save();
DateTime serverDateTime = systemInfo
.getServerDate();

List<Dashboard> dashboards;
Expand Down Expand Up @@ -242,8 +245,7 @@ private List<DashboardItem> updateDashboardItems(List<Dashboard> dashboards, Dat
}

// List of persisted dashboard items
Map<String, DashboardItem> persistedDashboardItems
= toMap(queryDashboardItems(null));
Map<String, DashboardItem> persistedDashboardItems = toMap(queryDashboardItems(null));

// List of updated dashboard items. We need this only to get
// information about updates of item shape.
Expand Down Expand Up @@ -365,7 +367,9 @@ private void sendDashboardChanges() throws APIException {

private void postDashboard(Dashboard dashboard) throws APIException {
try {
Response response = mDhisApi.postDashboard(dashboard);
Response response;
response = mDhisApi.postDashboard(dashboard);

// also, we will need to find UUID of newly created dashboard,
// which is contained inside of HTTP Location header
Header header = findLocationHeader(response.getHeaders());
Expand All @@ -384,7 +388,10 @@ private void postDashboard(Dashboard dashboard) throws APIException {

private void putDashboard(Dashboard dashboard) throws APIException {
try {
mDhisApi.putDashboard(dashboard.getUId(), dashboard);
//// TODO: 22/03/2018 Fix dashboard 2.29 update
if (!SystemInfo.isLoggedInServerWithLatestApiVersion()) {
mDhisApi.putDashboard(dashboard.getUId(), dashboard);
}

dashboard.setState(State.SYNCED);
dashboard.save();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ private void downloadImages(DhisController.ImageNetworkPolicy imageNetworkPolicy
for (int i = 0; i < requestUrlList.size(); i++) {
final String request = requestUrlList.get(i);
if (imageNetworkPolicy == DhisController.ImageNetworkPolicy.NO_CACHE) {
PicassoProvider.getInstance(context, false).invalidate(request);
PicassoProvider.getInstance(context, false)
.load(request).networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE).fetch();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ public final class Access {
@JsonProperty("delete")
boolean delete;

@JsonProperty("data")
Data data;

/**
* Factory method which creates Access object with all rights set to true.
*
Expand Down Expand Up @@ -129,9 +132,23 @@ public void setWrite(boolean write) {
this.write = write;
}

@JsonIgnore
public Data getData() {
return data;
}

@JsonIgnore
public void setData(Data data) {
this.data = data;
}

@JsonIgnore
@Override
public String toString() {
String dataField = "null";
if(data!=null) {
dataField = data.toString();
}
return StringUtils.create()
.append("Access {")
.append("manage=").append(manage)
Expand All @@ -140,6 +157,7 @@ public String toString() {
.append(", read=").append(read)
.append(", update=").append(update)
.append(", delete=").append(delete)
.append(", data=").append(dataField)
.append("}")
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.NotNull;
Expand Down Expand Up @@ -60,6 +61,7 @@ public final class Dashboard extends BaseIdentifiableObject {
@NotNull
State state;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty("dashboardItems")
List<DashboardItem> dashboardItems;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
package org.hisp.dhis.android.dashboard.api.models;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.ForeignKey;
Expand All @@ -51,9 +52,8 @@

import static android.text.TextUtils.isEmpty;

import static org.hisp.dhis.android.dashboard.api.controllers.MapController.queryDataMaps;

@Table(databaseName = DbDhis.NAME)
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class DashboardItem extends BaseIdentifiableObject {
public static final int MAX_CONTENT = 8;
public static final String SHAPE_NORMAL = "NORMAL";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.hisp.dhis.android.dashboard.api.models;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

import org.hisp.dhis.android.dashboard.api.utils.StringUtils;

public final class Data {


@JsonProperty("write")
boolean write;

@JsonProperty("read")
boolean read;


@JsonIgnore
public boolean isRead() {
return read;
}

@JsonIgnore
public void setRead(boolean read) {
this.read = read;
}

@JsonIgnore
public boolean isWrite() {
return write;
}

@JsonIgnore
public void setWrite(boolean write) {
this.write = write;
}

@JsonIgnore
@Override
public String toString() {
return StringUtils.create()
.append("Data {")
.append(", write=").append(write)
.append(", read=").append(read)
.append("}")
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,55 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;

import org.hisp.dhis.android.dashboard.api.models.meta.DbDhis;
import org.joda.time.DateTime;

@JsonIgnoreProperties(ignoreUnknown = true)
public final class SystemInfo {
@Table(databaseName = DbDhis.NAME)
public final class SystemInfo extends BaseModel {

public static final Float START_LATEST_API_VERSION =2.29f;

@Column(name = "id")
@PrimaryKey
int id = 1; //there should only be one row of this which overwrites every time its reloaded

@JsonProperty("buildTime")
@Column(name = "buildTime")
DateTime buildTime;

@JsonProperty("serverDate")
@Column(name = "serverDate")
DateTime serverDate;

@JsonProperty("calendar")
@Column(name = "calendar")
String calendar;

@JsonProperty("dateFormat")
@Column(name = "dateFormat")
String dateFormat;

@JsonProperty("intervalSinceLastAnalyticsTableSuccess")
@Column(name = "intervalSinceLastAnalyticsTableSuccess")
String intervalSinceLastAnalyticsTableSuccess;

@JsonProperty("lastAnalyticsTableSuccess")
@Column(name = "lastAnalyticsTableSuccess")
String lastAnalyticsTableSuccess;

@JsonProperty("revision")
@Column(name = "revision")
String revision;

@JsonProperty("version")
@Column(name = "version")
String version;

@JsonIgnore
Expand Down Expand Up @@ -112,4 +133,28 @@ public String getVersion() {
public void setVersion(String version) {
this.version = version;
}


public Float getVersionNumber() {
Float versionNumber = null;

if (version != null) {
versionNumber = removeNonNumericCharacters(version);
}

return versionNumber;
}

private static Float removeNonNumericCharacters(String version) {
return Float.parseFloat(version.replaceAll("[^0-9.]", ""));
}

public static SystemInfo getSystemInfo(){
return new Select().from(SystemInfo.class).querySingle();
}

public static boolean isLoggedInServerWithLatestApiVersion() {
Float serverVersion = getSystemInfo().getVersionNumber();
return serverVersion >= START_LATEST_API_VERSION;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,19 +100,19 @@ public interface DhisApi {
@Headers("Accept: application/json")
DashboardItem getDashboardItem(@Path("uid") String uId, @QueryMap Map<String, String> queryMap);

@POST("/dashboards/{dashboardUId}/items/content")
@POST("/26/dashboards/{dashboardUId}/items/content")
@Headers("Content-Type: application/json")
Response postDashboardItem(@Path("dashboardUId") String dashboardUId,
@Query("type") String type,
@Query("id") String uid,
@Body String stubBody);

@DELETE("/dashboards/{dashboardUId}/items/{itemUId}")
@DELETE("/26/dashboards/{dashboardUId}/items/{itemUId}")
@Headers("Content-Type: application/json")
Response deleteDashboardItem(@Path("dashboardUId") String dashboardUId,
@Path("itemUId") String itemUId);

@DELETE("/dashboards/{dashboardUid}/items/{itemUid}/content/{contentUid}")
@DELETE("/26/dashboards/{dashboardUid}/items/{itemUid}/content/{contentUid}")
@Headers("Content-Type: application/json")
Response deleteDashboardItemContent(@Path("dashboardUid") String dashboardUid,
@Path("itemUid") String itemUid,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,13 @@

import android.content.Context;

import com.squareup.okhttp.Cache;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Response;
import com.squareup.picasso.OkHttpDownloader;
import com.squareup.picasso.Picasso;

import org.hisp.dhis.android.dashboard.api.controllers.DhisController;
import org.hisp.dhis.android.dashboard.api.network.RepoManager;

import java.io.IOException;

public final class PicassoProvider {

private static Picasso mPicasso;
Expand Down
12 changes: 10 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
apply plugin: 'com.android.application'
apply plugin: 'jacoco-android'
apply plugin: 'io.fabric'

repositories {
maven { url 'https://maven.fabric.io/public' }
}

android {
compileSdkVersion 25
Expand All @@ -9,8 +14,8 @@ android {
applicationId "org.hisp.dhis.android.dashboard"
minSdkVersion 15
targetSdkVersion 25
versionCode 8
versionName "0.7.0"
versionCode 10
versionName "0.7.2"
}

compileOptions {
Expand Down Expand Up @@ -54,4 +59,7 @@ dependencies {

// Java test dependencies
testCompile "junit:junit:4.10"
compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
transitive = true;
}
}
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@
<activity
android:name="org.hisp.dhis.android.dashboard.ui.activities.InterpretationCommentsActivity"
android:label="@string/title_activity_interpretation_comments" />
<meta-data
android:name="io.fabric.ApiKey"
android:value="a5caa46009119f5e584e4964c30a922095b1075c"
/>
</application>
<uses-permission android:name="android.permission.INTERNET" />

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,18 @@
import android.os.Bundle;
import android.support.v7.widget.Toolbar;

import com.crashlytics.android.Crashlytics;

import org.hisp.dhis.android.dashboard.R;

import io.fabric.sdk.android.Fabric;

public class LauncherActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fabric.with(this, new Crashlytics());
setContentView(R.layout.activity_launcher);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
Expand Down
Loading

0 comments on commit 23be438

Please sign in to comment.