Preserve position of ScrollableChart on configuration changes

Fixes #240
pull/157/merge
Alinson S. Xavier 9 years ago
parent e6c9f7f0c9
commit 03e58f9ef2

@ -78,6 +78,8 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
{ {
long id = savedInstanceState.getLong("habit", -1); long id = savedInstanceState.getLong("habit", -1);
if (id > 0) this.habit = habitList.getById(id); if (id > 0) this.habit = habitList.getById(id);
historyChart.onRestoreInstanceState(
savedInstanceState.getParcelable("historyChart"));
} }
int padding = int padding =
@ -129,6 +131,7 @@ public class HistoryEditorDialog extends AppCompatDialogFragment
public void onSaveInstanceState(Bundle outState) public void onSaveInstanceState(Bundle outState)
{ {
outState.putLong("habit", habit.getId()); outState.putLong("habit", habit.getId());
outState.putParcelable("historyChart", historyChart.onSaveInstanceState());
} }
public void setController(@NonNull Controller controller) public void setController(@NonNull Controller controller)

@ -0,0 +1,63 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.common.views;
import android.os.*;
import android.view.*;
public class BundleSavedState extends View.BaseSavedState
{
public static final Parcelable.Creator<BundleSavedState> CREATOR =
new Parcelable.Creator<BundleSavedState>()
{
@Override
public BundleSavedState createFromParcel(Parcel source)
{
return new BundleSavedState(source);
}
@Override
public BundleSavedState[] newArray(int size)
{
return new BundleSavedState[size];
}
};
final Bundle bundle;
public BundleSavedState(Parcelable superState, Bundle bundle)
{
super(superState);
this.bundle = bundle;
}
public BundleSavedState(Parcel source)
{
super(source);
this.bundle = source.readBundle();
}
@Override
public void writeToParcel(Parcel out, int flags)
{
super.writeToParcel(out, flags);
out.writeBundle(bundle);
}
}

@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.common.views;
import android.animation.*; import android.animation.*;
import android.content.*; import android.content.*;
import android.os.*;
import android.util.*; import android.util.*;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
@ -143,6 +144,29 @@ public abstract class ScrollableChart extends View
this.scrollerBucketSize = scrollerBucketSize; this.scrollerBucketSize = scrollerBucketSize;
} }
@Override
public void onRestoreInstanceState(Parcelable state)
{
BundleSavedState bss = (BundleSavedState) state;
int x = bss.bundle.getInt("x");
int y = bss.bundle.getInt("y");
dataOffset = bss.bundle.getInt("dataOffset");
scroller.startScroll(0, 0, x, y, 0);
scroller.computeScrollOffset();
super.onRestoreInstanceState(bss.getSuperState());
}
@Override
public Parcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putInt("x", scroller.getCurrX());
bundle.putInt("y", scroller.getCurrY());
bundle.putInt("dataOffset", dataOffset);
return new BundleSavedState(superState, bundle);
}
private void init(Context context) private void init(Context context)
{ {
detector = new GestureDetector(context, this); detector = new GestureDetector(context, this);

Loading…
Cancel
Save