diff --git a/.idea/misc.xml b/.idea/misc.xml index 37a7509..7bfef59 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 2649b98..00a56fe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,10 +22,14 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation "androidx.recyclerview:recyclerview:1.0.0" implementation project(':roksky-reporting') testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + //for lifecycle and LiveData and ViewModel + implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0" } diff --git a/app/src/main/java/com/roksky/android/tools/sample/MainActivity.java b/app/src/main/java/com/roksky/android/tools/sample/MainActivity.java index 31805c3..9e861d0 100644 --- a/app/src/main/java/com/roksky/android/tools/sample/MainActivity.java +++ b/app/src/main/java/com/roksky/android/tools/sample/MainActivity.java @@ -5,8 +5,8 @@ import androidx.appcompat.app.AppCompatActivity; -import com.roksky.android.tools.reporting.model.DashBoard; -import com.roksky.android.tools.reporting.utils.FileReaderUtil; +import com.roksky.android.tools.reporting.ReportingLibrary; +import com.roksky.android.tools.reporting.model.xml.DashBoard; public class MainActivity extends AppCompatActivity { @@ -19,7 +19,11 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(View v) { try { - DashBoard dashBoard = FileReaderUtil.getDashBoard("reporting/reports.xml", getApplication()); + DashBoard dashBoard = ReportingLibrary.getInstance() + .withContext(getApplicationContext()) + .withFilePath("reporting/reports.xml") + .getDashBoard(); + //FileReaderUtil.getDashBoard("reporting/reports.xml", getApplication()); System.out.print(dashBoard.name); } catch (Exception e) { e.printStackTrace(); diff --git a/roksky-reporting/build.gradle b/roksky-reporting/build.gradle index 625c51c..aee333f 100644 --- a/roksky-reporting/build.gradle +++ b/roksky-reporting/build.gradle @@ -57,6 +57,10 @@ android { includeAndroidResources = true } } + compileOptions { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + } } @@ -82,6 +86,7 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' } task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) { diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/ReportingLibrary.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/ReportingLibrary.java new file mode 100644 index 0000000..f52baf6 --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/ReportingLibrary.java @@ -0,0 +1,40 @@ +package com.roksky.android.tools.reporting; + +import android.content.Context; + +import com.roksky.android.tools.reporting.model.xml.DashBoard; +import com.roksky.android.tools.reporting.utils.FileReaderUtil; + +public class ReportingLibrary { + private static ReportingLibrary reportingLibrary; + private String filePath; + private DashBoard dashBoard; + private Context context; + + private ReportingLibrary() { + } + + public static ReportingLibrary getInstance() { + if (reportingLibrary == null) { + reportingLibrary = new ReportingLibrary(); + } + return reportingLibrary; + } + + public ReportingLibrary withFilePath(String filePath) { + this.filePath = filePath; + return reportingLibrary; + } + + public ReportingLibrary withContext(Context context) { + this.context = context; + return reportingLibrary; + } + + public DashBoard getDashBoard() throws Exception { + if (dashBoard == null) { + dashBoard = FileReaderUtil.getDashBoard(filePath, context); + } + return dashBoard; + } +} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/adapter/ReportAdapter.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/adapter/ReportAdapter.java new file mode 100644 index 0000000..3799912 --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/adapter/ReportAdapter.java @@ -0,0 +1,55 @@ +package com.roksky.android.tools.reporting.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.lifecycle.LiveData; +import androidx.recyclerview.widget.RecyclerView; +import com.roksky.android.tools.reporting.R; +import com.roksky.android.tools.reporting.model.Report; +import java.util.List; + + +public class ReportAdapter extends RecyclerView.Adapter{ + private LiveData> reportList; + + public ReportAdapter(LiveData> reportList) { + this.reportList = reportList; + } + + @NonNull + @Override + public ReportAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.report_details, parent, false); + return new ReportAdapterViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ReportAdapterViewHolder holder, int position) { + com.roksky.android.tools.reporting.model.Report report = reportList.getValue().get(position); + holder.tvTitle.setText(report.getName()); + holder.tvTotal.setText(report.getCount()); + holder.tvTotal.setText(R.string.app_name); + } + + @Override + public int getItemCount() { + return reportList.getValue().size(); + } + + public class ReportAdapterViewHolder extends RecyclerView.ViewHolder{ + TextView tvTitle; + TextView tvTotal; + TextView tvViewContent; + + public ReportAdapterViewHolder(@NonNull View itemView) { + super(itemView); + tvTitle = itemView.findViewById(R.id.title); + tvTotal = itemView.findViewById(R.id.total); + tvViewContent = itemView.findViewById(R.id.viewContent); + + } + } +} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/DataSource.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/DataSource.java index 7371682..7e9b592 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/DataSource.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/DataSource.java @@ -1,8 +1,8 @@ package com.roksky.android.tools.reporting.datasource; -import com.roksky.android.tools.reporting.model.Query; -import com.roksky.android.tools.reporting.model.QueryParameter; -import com.roksky.android.tools.reporting.model.QueryResult; +import com.roksky.android.tools.reporting.model.xml.Query; +import com.roksky.android.tools.reporting.model.xml.QueryParameter; +import com.roksky.android.tools.reporting.model.xml.QueryResult; import java.util.List; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/SQLiteDS.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/SQLiteDS.java index 8fbc381..425901f 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/SQLiteDS.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/datasource/SQLiteDS.java @@ -1,8 +1,8 @@ package com.roksky.android.tools.reporting.datasource; -import com.roksky.android.tools.reporting.model.Query; -import com.roksky.android.tools.reporting.model.QueryParameter; -import com.roksky.android.tools.reporting.model.QueryResult; +import com.roksky.android.tools.reporting.model.xml.Query; +import com.roksky.android.tools.reporting.model.xml.QueryParameter; +import com.roksky.android.tools.reporting.model.xml.QueryResult; import java.util.List; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryResult.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryResult.java deleted file mode 100644 index 206ff33..0000000 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryResult.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.roksky.android.tools.reporting.model; - -public final class QueryResult { -} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Report.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Report.java index 4269ca5..079690f 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Report.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Report.java @@ -1,25 +1,23 @@ package com.roksky.android.tools.reporting.model; -import org.simpleframework.xml.Element; -import org.simpleframework.xml.ElementList; +public class Report { -import java.util.List; + private String name; + private Integer count; -@Element -public final class Report { + public String getName() { + return name; + } - @Element(required = false) - public String type; + public void setName(String name) { + this.name = name; + } - @Element(name = "query-source", required = false) - public String querySource; + public Integer getCount() { + return count; + } - @Element(required = false) - public String name; - - @ElementList(name = "report-header", required = false) - public List reportHeader; - - @ElementList(name = "report-footers", required = false) - public List reportFooters; + public void setCount(Integer count) { + this.count = count; + } } diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/DashBoard.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/DashBoard.java similarity index 89% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/DashBoard.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/DashBoard.java index 865a38f..e27d721 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/DashBoard.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/DashBoard.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.ElementList; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Query.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Query.java similarity index 88% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Query.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Query.java index e5a963e..7dc8984 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/Query.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Query.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryParameter.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryParameter.java similarity index 78% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryParameter.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryParameter.java index ef5fcfc..ef73987 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/QueryParameter.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryParameter.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Element; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryResult.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryResult.java new file mode 100644 index 0000000..fef44df --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/QueryResult.java @@ -0,0 +1,4 @@ +package com.roksky.android.tools.reporting.model.xml; + +public final class QueryResult { +} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Report.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Report.java new file mode 100644 index 0000000..a4170d4 --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/Report.java @@ -0,0 +1,25 @@ +package com.roksky.android.tools.reporting.model.xml; + +import org.simpleframework.xml.Element; +import org.simpleframework.xml.ElementList; + +import java.util.List; + +@Element +public final class Report { + + @Element(required = false) + public String type; + + @Element(name = "query-source", required = false) + public String querySource; + + @Element(required = false) + public String name; + + @ElementList(name = "report-header", required = false) + public List reportHeader; + + @ElementList(name = "report-footers", required = false) + public List reportFooters; +} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportColumn.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportColumn.java similarity index 83% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportColumn.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportColumn.java index f0e12ae..953c3ea 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportColumn.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportColumn.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Element; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFilter.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFilter.java similarity index 88% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFilter.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFilter.java index 22c2224..d64d200 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFilter.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFilter.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFooter.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFooter.java similarity index 85% rename from roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFooter.java rename to roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFooter.java index 5428f9a..62815e9 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/ReportFooter.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/model/xml/ReportFooter.java @@ -1,4 +1,4 @@ -package com.roksky.android.tools.reporting.model; +package com.roksky.android.tools.reporting.model.xml; import org.simpleframework.xml.Element; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/report/ReportView.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/report/ReportView.java index 92d03de..8cda029 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/report/ReportView.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/report/ReportView.java @@ -2,7 +2,7 @@ import android.view.View; -import com.roksky.android.tools.reporting.model.Report; +import com.roksky.android.tools.reporting.model.xml.Report; public interface ReportView { diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/FileReaderUtil.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/FileReaderUtil.java index 7eb92f3..216f706 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/FileReaderUtil.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/FileReaderUtil.java @@ -4,7 +4,7 @@ import androidx.annotation.Nullable; -import com.roksky.android.tools.reporting.model.DashBoard; +import com.roksky.android.tools.reporting.model.xml.DashBoard; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/ViewRenderer.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/ViewRenderer.java index 5b2a33d..66a0b7b 100644 --- a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/ViewRenderer.java +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/utils/ViewRenderer.java @@ -2,7 +2,7 @@ import android.view.View; -import com.roksky.android.tools.reporting.model.DashBoard; +import com.roksky.android.tools.reporting.model.xml.DashBoard; import java.util.ArrayList; import java.util.List; diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/view/ReportActivity.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/view/ReportActivity.java new file mode 100644 index 0000000..f64db58 --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/view/ReportActivity.java @@ -0,0 +1,34 @@ +package com.roksky.android.tools.reporting.view; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.LiveData; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.roksky.android.tools.reporting.R; +import com.roksky.android.tools.reporting.adapter.ReportAdapter; +import com.roksky.android.tools.reporting.model.Report; +import com.roksky.android.tools.reporting.viewmodel.ReportViewModel; + +import java.util.List; + +public class ReportActivity extends AppCompatActivity { + + LiveData> reports; + ReportViewModel reportViewModel = new ReportViewModel(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_reports); + + RecyclerView recyclerView = findViewById(R.id.reports); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + + reports = reportViewModel.getReports(); + ReportAdapter adapter = new ReportAdapter(reports); + recyclerView.setAdapter(adapter); + } +} diff --git a/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/viewmodel/ReportViewModel.java b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/viewmodel/ReportViewModel.java new file mode 100644 index 0000000..1b96cb0 --- /dev/null +++ b/roksky-reporting/src/main/java/com/roksky/android/tools/reporting/viewmodel/ReportViewModel.java @@ -0,0 +1,49 @@ +package com.roksky.android.tools.reporting.viewmodel; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.roksky.android.tools.reporting.ReportingLibrary; +import com.roksky.android.tools.reporting.model.Report; +import com.roksky.android.tools.reporting.model.xml.DashBoard; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ReportViewModel extends ViewModel { + + private List reportList; + + public LiveData> getReports() { + if (reportList == null) { + reportList = new ArrayList<>(); + + loadReports(); + } + MutableLiveData> liveData = new MutableLiveData<>(); + liveData.setValue(reportList); + + return liveData; + } + + + private void loadReports() { + try { + DashBoard dashBoard = ReportingLibrary.getInstance().getDashBoard(); + + if(dashBoard != null && dashBoard.reports != null){ + for (com.roksky.android.tools.reporting.model.xml.Report r: dashBoard.reports){ + Report report = new Report(); + report.setName(r.name); + report.setCount(new Random().nextInt()); + reportList.add(report); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/roksky-reporting/src/main/res/layout/activity_reports.xml b/roksky-reporting/src/main/res/layout/activity_reports.xml new file mode 100644 index 0000000..cec12ff --- /dev/null +++ b/roksky-reporting/src/main/res/layout/activity_reports.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/roksky-reporting/src/main/res/layout/report_details.xml b/roksky-reporting/src/main/res/layout/report_details.xml new file mode 100644 index 0000000..a2cff81 --- /dev/null +++ b/roksky-reporting/src/main/res/layout/report_details.xml @@ -0,0 +1,23 @@ + + + + + + + + + +