Prevent crash when AbstractActivityChartFragment is wrongly extended

Some fragments are extending AbstractActivityChartFragment when they should
not, since they are not in an instance of ChartsHost. This will make them
crash occasionally when switching dates in the actual charts. Prevent this,
but log at error level.
This commit is contained in:
José Rebelo
2025-03-30 13:31:34 +01:00
parent 6ed0550881
commit 4ae8e31667
2 changed files with 19 additions and 0 deletions
@@ -17,6 +17,7 @@
package nodomain.freeyourgadget.gadgetbridge.activities;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -73,6 +74,18 @@ public class ActivitySummariesChartFragment extends AbstractActivityChartFragmen
private int startTime;
private int endTime;
@Override
protected void onReceive(final Context context, final Intent intent) {
// FIXME: We need to override this, or we crash
// This class should be refactored not to extend AbstractActivityChartFragment
// java.lang.ClassCastException: nodomain.freeyourgadget.gadgetbridge.activities.ActivitySummaryDetail cannot be cast to nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsHost
// at nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractChartFragment.getChartsHost(AbstractChartFragment.java:164)
// at nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractChartFragment.getStartDate(AbstractChartFragment.java:176)
// at nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractChartFragment.onReceive(AbstractChartFragment.java:215)
// at nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractChartFragment$1.onReceive(AbstractChartFragment.java:82)
// at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:319)
}
public void setDateAndGetData(@Nullable File trackFile, GBDevice gbDevice, long startTime, long endTime) {
this.trackFile = trackFile;
this.startTime = (int) startTime;
@@ -205,6 +205,12 @@ public abstract class AbstractChartFragment<D extends ChartsData> extends Abstra
}
protected void onReceive(Context context, Intent intent) {
final FragmentActivity fragmentActivity = requireActivity();
if (fragmentActivity instanceof ChartsHost) {
LOG.error("{} is not an instance of ChartsHost, preventing crash", fragmentActivity.getClass());
return;
}
String action = intent.getAction();
if (ChartsHost.REFRESH.equals(action)) {
updateDateInfo(getStartDate(), getEndDate());