RTL: Navigate to previous tab when back.

When go back from RTL language, user should be navigated to the
previous setting tab.

Bug: 31145366
Test: make RunSettingsRoboTests

Change-Id: I2f2ec727f9737ea0e52dac9950c8af34559e3d9a
This commit is contained in:
jackqdyulei
2016-09-07 13:27:50 -07:00
parent 9f15fe4fc1
commit e54dd3a0cd
3 changed files with 239 additions and 0 deletions

View File

@@ -17,10 +17,12 @@
package com.android.settings.widget;
import android.content.Context;
import android.os.Parcelable;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.os.Parcel;
import java.util.Locale;
@@ -54,6 +56,23 @@ public final class RtlCompatibleViewPager extends ViewPager {
super.setCurrentItem(getRtlAwareIndex(item));
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable parcelable = super.onSaveInstanceState();
RtlSavedState rtlSavedState = new RtlSavedState(parcelable);
rtlSavedState.position = getCurrentItem();
return rtlSavedState;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
RtlSavedState rtlSavedState = (RtlSavedState) state;
super.onRestoreInstanceState(rtlSavedState.getSuperState());
setCurrentItem(rtlSavedState.position);
}
/**
* Get a "RTL friendly" index. If the locale is LTR, the index is returned as is.
* Otherwise it's transformed so view pager can render views using the new index for RTL. For
@@ -70,4 +89,38 @@ public final class RtlCompatibleViewPager extends ViewPager {
}
return index;
}
static class RtlSavedState extends BaseSavedState {
int position;
public RtlSavedState(Parcelable superState) {
super(superState);
}
private RtlSavedState(Parcel in) {
super(in);
position = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(position);
}
public static final Parcelable.Creator<RtlSavedState> CREATOR
= new Parcelable.Creator<RtlSavedState>() {
@Override
public RtlSavedState createFromParcel(Parcel in) {
return new RtlSavedState(in);
}
@Override
public RtlSavedState[] newArray(int size) {
return new RtlSavedState[size];
}
};
}
}