Skip to content

Commit

Permalink
oppia-1488 - created bg threads for the query and created progress bars
Browse files Browse the repository at this point in the history
  • Loading branch information
jbc25 authored and AlbertoMoreta committed Apr 24, 2023
1 parent ac12dc1 commit aeea234
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 18 deletions.
Expand Up @@ -18,11 +18,15 @@
package org.digitalcampus.oppia.fragments;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.core.content.ContextCompat;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
Expand All @@ -36,8 +40,8 @@
import org.digitalcampus.mobile.learning.R;
import org.digitalcampus.mobile.learning.databinding.FragmentActivitiesBinding;
import org.digitalcampus.oppia.adapter.ActivityTypesAdapter;
import org.digitalcampus.oppia.database.DbHelper;
import org.digitalcampus.oppia.application.SessionManager;
import org.digitalcampus.oppia.database.DbHelper;
import org.digitalcampus.oppia.gamification.Gamification;
import org.digitalcampus.oppia.model.ActivityCount;
import org.digitalcampus.oppia.model.ActivityType;
Expand All @@ -53,11 +57,11 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.inject.Inject;

import androidx.core.content.ContextCompat;

public class ActivitiesFragment extends AppFragment implements TabLayout.OnTabSelectedListener, ActivityTypesAdapter.OnItemClickListener {

private static final String ARG_COURSE = "arg_course";
Expand All @@ -73,17 +77,20 @@ public class ActivitiesFragment extends AppFragment implements TabLayout.OnTabSe
private List<Points> pointsFiltered = new ArrayList<>();
private List<String> labels = new ArrayList<>();
private Map<String, ActivityCount> activitiesGrouped = new LinkedHashMap<>(); // LinkedHashMap: ordered by insertion. TreeMap: sorts naturally by key
private int currentDatesRangePosition;
private int currentDatesRangePosition = POSITION_TAB_LAST_WEEK;
private Course course;
private ArrayList<ActivityType> activityTypes;
private FragmentActivitiesBinding binding;

private final Executor executor = Executors.newSingleThreadExecutor();
private final Handler handler = new Handler(Looper.getMainLooper());

public static ActivitiesFragment newInstance(Course course) {
ActivitiesFragment fragment = new ActivitiesFragment();
Bundle args = new Bundle();
args.putSerializable(ARG_COURSE, course);
fragment.setArguments(args);
return fragment ;
return fragment;
}

@Override
Expand All @@ -104,7 +111,6 @@ public void onActivityCreated(Bundle savedInstanceState) {
course = (Course) getArguments().getSerializable(ARG_COURSE);

loadPoints();
showPointsFiltered(POSITION_TAB_LAST_WEEK);

}

Expand Down Expand Up @@ -154,6 +160,11 @@ private void configureChart() {

private void showPointsFiltered(int position) {

if (pointsFull == null) {
// still loading in bg
return;
}

currentDatesRangePosition = position;

DateTime initialDateTime;
Expand Down Expand Up @@ -235,8 +246,8 @@ private void groupPoints() {

break;

default:
throw new IllegalArgumentException("currentDatesRangePosition not valid: " + currentDatesRangePosition);
default:
throw new IllegalArgumentException("currentDatesRangePosition not valid: " + currentDatesRangePosition);
}

for (Points point : pointsFiltered) {
Expand Down Expand Up @@ -301,7 +312,7 @@ private void loadPlot(boolean animate) {

}

private void loadLabels(){
private void loadLabels() {
labels.clear();
for (Map.Entry<String, ActivityCount> entryMap : activitiesGrouped.entrySet()) {
labels.add(entryMap.getKey());
Expand All @@ -316,10 +327,10 @@ private void loadLabels(){
}
}

private void configureAxis(int maxYValue){
private void configureAxis(int maxYValue) {
XAxis xAxis = binding.chart.getXAxis();
xAxis.setLabelCount(Math.min(labels.size(), 12));
xAxis.setValueFormatter(new ValueFormatter(){
xAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {

Expand All @@ -335,7 +346,7 @@ public String getFormattedValue(float value) {

YAxis yAxis = binding.chart.getAxisLeft();
yAxis.setLabelCount(Math.min(maxYValue, 10));
yAxis.setValueFormatter(new ValueFormatter(){
yAxis.setValueFormatter(new ValueFormatter() {

@Override
public String getFormattedValue(float value) {
Expand All @@ -349,9 +360,19 @@ public String getFormattedValue(float value) {
}

private void loadPoints() {
DbHelper db = DbHelper.getInstance(super.getActivity());
long userId = db.getUserId(SessionManager.getUsername(super.getActivity()));
pointsFull = db.getUserPoints(userId, course, true, true, false);

binding.progressPoints.setVisibility(View.VISIBLE);
executor.execute(() -> {

DbHelper db = DbHelper.getInstance(super.getActivity());
long userId = db.getUserId(SessionManager.getUsername(super.getActivity()));
pointsFull = db.getUserPoints(userId, course, true, true, false);

handler.post(() -> {
binding.progressPoints.setVisibility(View.GONE);
showPointsFiltered(currentDatesRangePosition);
});
});
}

// Useful for testing
Expand Down
Expand Up @@ -21,6 +21,8 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
Expand Down Expand Up @@ -54,6 +56,8 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.inject.Inject;

Expand All @@ -77,6 +81,9 @@ public class PointsFragment extends AppFragment implements TabLayout.OnTabSelect
private PointsAdapter adapterPoints;
private FragmentPointsBinding binding;

private final Executor executor = Executors.newSingleThreadExecutor();
private final Handler handler = new Handler(Looper.getMainLooper());

public static PointsFragment newInstance(Course course) {
PointsFragment pointsFragment = new PointsFragment();
Bundle args = new Bundle();
Expand Down Expand Up @@ -319,9 +326,20 @@ private void groupPoints() {
}

private void loadPoints() {
DbHelper db = DbHelper.getInstance(super.getActivity());
long userId = db.getUserId(SessionManager.getUsername(super.getActivity()));
pointsFull = db.getUserPoints(userId, course, false, false, true);

binding.progressPoints.setVisibility(View.VISIBLE);
executor.execute(() -> {

DbHelper db = DbHelper.getInstance(super.getActivity());
long userId = db.getUserId(SessionManager.getUsername(super.getActivity()));
pointsFull = db.getUserPoints(userId, course, false, false, true);

handler.post(() -> {
binding.progressPoints.setVisibility(View.GONE);
showPointsFiltered(currentDatesRangePosition);
});
});

}

@Override
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/layout/fragment_activities.xml
Expand Up @@ -41,6 +41,12 @@
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ProgressBar
android:id="@+id/progress_points"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true" />
</RelativeLayout>

<androidx.recyclerview.widget.RecyclerView
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/layout/fragment_points.xml
Expand Up @@ -50,6 +50,12 @@
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ProgressBar
android:id="@+id/progress_points"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true" />
</RelativeLayout>

<LinearLayout
Expand Down

0 comments on commit aeea234

Please sign in to comment.