OverScroller$SplineOverScroller.smali
.class Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;
.super Ljava/lang/Object;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lit/sephiroth/android/library/widget/OverScroller;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x8
name = "SplineOverScroller"
.end annotation
# static fields
.field private static final BALLISTIC:I = 0x2
.field private static final CUBIC:I = 0x1
.field private static DECELERATION_RATE:F = 0.0f
.field private static final END_TENSION:F = 1.0f
.field private static final GRAVITY:F = 2000.0f
.field private static final INFLEXION:F = 0.35f
.field private static final NB_SAMPLES:I = 0x64
.field private static final P1:F = 0.175f
.field private static final P2:F = 0.35000002f
.field private static final SPLINE:I = 0x0
.field private static final SPLINE_POSITION:[F
.field private static final SPLINE_TIME:[F
.field private static final START_TENSION:F = 0.5f
# instance fields
.field private mCurrVelocity:F
.field private mCurrentPosition:I
.field private mDeceleration:F
.field private mDuration:I
.field private mFinal:I
.field private mFinished:Z
.field private mFlingFriction:F
.field private mOver:I
.field private mPhysicalCoeff:F
.field private mSplineDistance:I
.field private mSplineDuration:I
.field private mStart:I
.field private mStartTime:J
.field private mState:I
.field private mVelocity:I
# direct methods
.method static constructor <clinit>()V
.registers 19
const-wide v0, 0x3fe8f5c28f5c28f6L # 0.78
invoke-static {v0, v1}, Ljava/lang/Math;->log(D)D
move-result-wide v0
const-wide v2, 0x3feccccccccccccdL # 0.9
invoke-static {v2, v3}, Ljava/lang/Math;->log(D)D
move-result-wide v2
div-double/2addr v0, v2
double-to-float v0, v0
sput v0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->DECELERATION_RATE:F
const/16 v0, 0x65
new-array v1, v0, [F
sput-object v1, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_POSITION:[F
new-array v0, v0, [F
sput-object v0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_TIME:[F
const/4 v0, 0x0
const/4 v1, 0x0
const/4 v1, 0x0
const/4 v2, 0x0
:goto_24
const/16 v3, 0x64
const/high16 v4, 0x3f800000 # 1.0f
if-ge v2, v3, :cond_bb
int-to-float v3, v2
const/high16 v5, 0x42c80000 # 100.0f
div-float v5, v3, v5
const/high16 v3, 0x3f800000 # 1.0f
:goto_31
sub-float v6, v3, v0
const/high16 v7, 0x40000000 # 2.0f
div-float/2addr v6, v7
add-float/2addr v6, v0
const/high16 v8, 0x40400000 # 3.0f
mul-float v9, v6, v8
sub-float v10, v4, v6
mul-float v9, v9, v10
const v11, 0x3e333333 # 0.175f
mul-float v12, v10, v11
const v13, 0x3eb33334 # 0.35000002f
mul-float v14, v6, v13
add-float/2addr v12, v14
mul-float v12, v12, v9
mul-float v14, v6, v6
mul-float v14, v14, v6
add-float/2addr v12, v14
sub-float v15, v12, v5
invoke-static {v15}, Ljava/lang/Math;->abs(F)F
move-result v15
move/from16 v16, v12
float-to-double v11, v15
const-wide v17, 0x3ee4f8b588e368f1L # 1.0E-5
cmpg-double v15, v11, v17
if-gez v15, :cond_b1
sget-object v3, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_POSITION:[F
const/high16 v11, 0x3f000000 # 0.5f
mul-float v10, v10, v11
add-float/2addr v10, v6
mul-float v9, v9, v10
add-float/2addr v9, v14
aput v9, v3, v2
const/high16 v3, 0x3f800000 # 1.0f
:goto_71
sub-float v6, v3, v1
div-float/2addr v6, v7
add-float/2addr v6, v1
mul-float v9, v6, v8
sub-float v10, v4, v6
mul-float v9, v9, v10
mul-float v12, v10, v11
add-float/2addr v12, v6
mul-float v12, v12, v9
mul-float v14, v6, v6
mul-float v14, v14, v6
add-float/2addr v12, v14
sub-float v15, v12, v5
invoke-static {v15}, Ljava/lang/Math;->abs(F)F
move-result v15
float-to-double v7, v15
cmpg-double v15, v7, v17
if-gez v15, :cond_a2
sget-object v3, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_TIME:[F
const v7, 0x3e333333 # 0.175f
mul-float v10, v10, v7
mul-float v6, v6, v13
add-float/2addr v10, v6
mul-float v9, v9, v10
add-float/2addr v9, v14
aput v9, v3, v2
add-int/lit8 v2, v2, 0x1
goto :goto_24
:cond_a2
const v7, 0x3e333333 # 0.175f
cmpl-float v8, v12, v5
if-lez v8, :cond_ab
move v3, v6
goto :goto_ac
:cond_ab
move v1, v6
:goto_ac
const/high16 v7, 0x40000000 # 2.0f
const/high16 v8, 0x40400000 # 3.0f
goto :goto_71
:cond_b1
cmpl-float v7, v16, v5
if-lez v7, :cond_b8
move v3, v6
goto/16 :goto_31
:cond_b8
move v0, v6
goto/16 :goto_31
:cond_bb
sget-object v0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_POSITION:[F
sget-object v1, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_TIME:[F
aput v4, v1, v3
aput v4, v0, v3
return-void
.end method
.method constructor <init>(Landroid/content/Context;)V
.registers 3
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
invoke-static {}, Landroid/view/ViewConfiguration;->getScrollFriction()F
move-result v0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFlingFriction:F
const/4 v0, 0x0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
const/4 v0, 0x1
iput-boolean v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
invoke-virtual {p1}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object p1
invoke-virtual {p1}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
move-result-object p1
iget p1, p1, Landroid/util/DisplayMetrics;->density:F
const/high16 v0, 0x43200000 # 160.0f
mul-float p1, p1, v0
const v0, 0x43c10b3d
mul-float p1, p1, v0
const v0, 0x3f570a3d # 0.84f
mul-float p1, p1, v0
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mPhysicalCoeff:F
return-void
.end method
.method static synthetic access$000(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)Z
.registers 1
iget-boolean p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return p0
.end method
.method static synthetic access$002(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;Z)Z
.registers 2
iput-boolean p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return p1
.end method
.method static synthetic access$100(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)I
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrentPosition:I
return p0
.end method
.method static synthetic access$200(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)F
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
return p0
.end method
.method static synthetic access$300(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)I
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
return p0
.end method
.method static synthetic access$400(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)I
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
return p0
.end method
.method static synthetic access$500(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)I
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
return p0
.end method
.method static synthetic access$600(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)J
.registers 3
iget-wide v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
return-wide v0
.end method
.method static synthetic access$700(Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;)I
.registers 1
iget p0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
return p0
.end method
.method private adjustDuration(III)V
.registers 7
sub-int/2addr p2, p1
sub-int/2addr p3, p1
int-to-float p1, p3
int-to-float p2, p2
div-float/2addr p1, p2
invoke-static {p1}, Ljava/lang/Math;->abs(F)F
move-result p1
const/high16 p2, 0x42c80000 # 100.0f
mul-float p3, p1, p2
float-to-int p3, p3
const/16 v0, 0x64
if-ge p3, v0, :cond_2d
int-to-float v0, p3
div-float/2addr v0, p2
add-int/lit8 v1, p3, 0x1
int-to-float v2, v1
div-float/2addr v2, p2
sget-object p2, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_TIME:[F
aget p3, p2, p3
aget p2, p2, v1
sub-float/2addr p1, v0
sub-float/2addr v2, v0
div-float/2addr p1, v2
sub-float/2addr p2, p3
mul-float p1, p1, p2
add-float/2addr p3, p1
iget p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
int-to-float p1, p1
mul-float p1, p1, p3
float-to-int p1, p1
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
:cond_2d
return-void
.end method
.method private fitOnBounceCurve(III)V
.registers 9
neg-int v0, p3
int-to-float v0, v0
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
div-float/2addr v0, v1
mul-int p3, p3, p3
int-to-float p3, p3
const/high16 v2, 0x40000000 # 2.0f
div-float/2addr p3, v2
invoke-static {v1}, Ljava/lang/Math;->abs(F)F
move-result v1
div-float/2addr p3, v1
sub-int p1, p2, p1
invoke-static {p1}, Ljava/lang/Math;->abs(I)I
move-result p1
int-to-float p1, p1
add-float/2addr p3, p1
float-to-double v1, p3
const-wide/high16 v3, 0x4000000000000000L # 2.0
mul-double v1, v1, v3
iget p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
invoke-static {p1}, Ljava/lang/Math;->abs(F)F
move-result p1
float-to-double v3, p1
div-double/2addr v1, v3
invoke-static {v1, v2}, Ljava/lang/Math;->sqrt(D)D
move-result-wide v1
double-to-float p1, v1
iget-wide v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
sub-float p3, p1, v0
const/high16 v0, 0x447a0000 # 1000.0f
mul-float p3, p3, v0
float-to-int p3, p3
int-to-long v3, p3
sub-long/2addr v1, v3
iput-wide v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iget p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
neg-float p2, p2
mul-float p2, p2, p1
float-to-int p1, p2
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
return-void
.end method
.method private static getDeceleration(I)F
.registers 1
if-lez p0, :cond_5
const/high16 p0, -0x3b060000 # -2000.0f
goto :goto_7
:cond_5
const/high16 p0, 0x44fa0000 # 2000.0f
:goto_7
return p0
.end method
.method private getSplineDeceleration(I)D
.registers 4
invoke-static {p1}, Ljava/lang/Math;->abs(I)I
move-result p1
int-to-float p1, p1
const v0, 0x3eb33333 # 0.35f
mul-float p1, p1, v0
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFlingFriction:F
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mPhysicalCoeff:F
mul-float v0, v0, v1
div-float/2addr p1, v0
float-to-double v0, p1
invoke-static {v0, v1}, Ljava/lang/Math;->log(D)D
move-result-wide v0
return-wide v0
.end method
.method private getSplineFlingDistance(I)D
.registers 10
invoke-direct {p0, p1}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getSplineDeceleration(I)D
move-result-wide v0
sget p1, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->DECELERATION_RATE:F
float-to-double v2, p1
const-wide/high16 v4, 0x3ff0000000000000L # 1.0
sub-double/2addr v2, v4
iget v4, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFlingFriction:F
iget v5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mPhysicalCoeff:F
mul-float v4, v4, v5
float-to-double v4, v4
float-to-double v6, p1
div-double/2addr v6, v2
mul-double v6, v6, v0
invoke-static {v6, v7}, Ljava/lang/Math;->exp(D)D
move-result-wide v0
mul-double v4, v4, v0
return-wide v4
.end method
.method private getSplineFlingDuration(I)I
.registers 8
invoke-direct {p0, p1}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getSplineDeceleration(I)D
move-result-wide v0
sget p1, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->DECELERATION_RATE:F
float-to-double v2, p1
const-wide/high16 v4, 0x3ff0000000000000L # 1.0
sub-double/2addr v2, v4
div-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->exp(D)D
move-result-wide v0
const-wide v2, 0x408f400000000000L # 1000.0
mul-double v0, v0, v2
double-to-int p1, v0
return p1
.end method
.method private onEdgeReached()V
.registers 6
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
mul-int v0, v0, v0
int-to-float v0, v0
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
invoke-static {v1}, Ljava/lang/Math;->abs(F)F
move-result v1
const/high16 v2, 0x40000000 # 2.0f
mul-float v1, v1, v2
div-float/2addr v0, v1
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v1, v1
invoke-static {v1}, Ljava/lang/Math;->signum(F)F
move-result v1
iget v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
int-to-float v4, v3
cmpl-float v4, v0, v4
if-lez v4, :cond_2e
neg-float v0, v1
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v4, v1
mul-float v0, v0, v4
int-to-float v1, v1
mul-float v0, v0, v1
int-to-float v1, v3
mul-float v1, v1, v2
div-float/2addr v0, v1
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
int-to-float v0, v3
:cond_2e
float-to-int v1, v0
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
const/4 v1, 0x2
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iget v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
if-lez v2, :cond_3b
goto :goto_3c
:cond_3b
neg-float v0, v0
:goto_3c
float-to-int v0, v0
add-int/2addr v1, v0
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
const/high16 v0, 0x447a0000 # 1000.0f
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v1, v1
mul-float v1, v1, v0
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
div-float/2addr v1, v0
float-to-int v0, v1
neg-int v0, v0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
return-void
.end method
.method private startAfterEdge(IIII)V
.registers 19
move-object v6, p0
move v1, p1
move/from16 v0, p3
move/from16 v2, p4
const/4 v3, 0x1
move/from16 v4, p2
if-le v1, v4, :cond_17
if-ge v1, v0, :cond_17
const-string v0, "OverScroller"
const-string v1, "startAfterEdge called from a valid position"
invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
iput-boolean v3, v6, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return-void
:cond_17
const/4 v5, 0x0
if-le v1, v0, :cond_1c
const/4 v7, 0x1
goto :goto_1d
:cond_1c
const/4 v7, 0x0
:goto_1d
if-eqz v7, :cond_21
move v8, v0
goto :goto_22
:cond_21
move v8, v4
:goto_22
sub-int v9, v1, v8
mul-int v10, v9, v2
if-ltz v10, :cond_29
goto :goto_2a
:cond_29
const/4 v3, 0x0
:goto_2a
if-eqz v3, :cond_30
invoke-direct {p0, p1, v8, v2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startBounceAfterEdge(III)V
goto :goto_54
:cond_30
invoke-direct {p0, v2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getSplineFlingDistance(I)D
move-result-wide v10
invoke-static {v9}, Ljava/lang/Math;->abs(I)I
move-result v3
int-to-double v12, v3
cmpl-double v3, v10, v12
if-lez v3, :cond_51
if-eqz v7, :cond_41
move v3, v4
goto :goto_42
:cond_41
move v3, v1
:goto_42
if-eqz v7, :cond_46
move v4, v1
goto :goto_47
:cond_46
move v4, v0
:goto_47
iget v5, v6, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
move-object v0, p0
move v1, p1
move/from16 v2, p4
invoke-virtual/range {v0 .. v5}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->fling(IIIII)V
goto :goto_54
:cond_51
invoke-direct {p0, p1, v8, v2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startSpringback(III)V
:goto_54
return-void
.end method
.method private startBounceAfterEdge(III)V
.registers 5
if-nez p3, :cond_5
sub-int v0, p1, p2
goto :goto_6
:cond_5
move v0, p3
:goto_6
invoke-static {v0}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getDeceleration(I)F
move-result v0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
invoke-direct {p0, p1, p2, p3}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->fitOnBounceCurve(III)V
invoke-direct {p0}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->onEdgeReached()V
return-void
.end method
.method private startSpringback(III)V
.registers 6
const/4 p3, 0x0
iput-boolean p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
const/4 p3, 0x1
iput p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
sub-int/2addr p1, p2
invoke-static {p1}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getDeceleration(I)F
move-result p2
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
neg-int p2, p1
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
invoke-static {p1}, Ljava/lang/Math;->abs(I)I
move-result p2
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
int-to-double p1, p1
const-wide/high16 v0, -0x4000000000000000L # -2.0
mul-double p1, p1, v0
iget p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
float-to-double v0, p3
div-double/2addr p1, v0
invoke-static {p1, p2}, Ljava/lang/Math;->sqrt(D)D
move-result-wide p1
const-wide v0, 0x408f400000000000L # 1000.0
mul-double p1, p1, v0
double-to-int p1, p1
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
return-void
.end method
# virtual methods
.method continueWhenFinished()Z
.registers 8
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz v0, :cond_1d
if-eq v0, v1, :cond_1c
const/4 v3, 0x2
if-eq v0, v3, :cond_c
goto :goto_3d
:cond_c
iget-wide v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
int-to-long v5, v0
add-long/2addr v3, v5
iput-wide v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
iget v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
invoke-direct {p0, v0, v3, v2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startSpringback(III)V
goto :goto_3d
:cond_1c
return v2
:cond_1d
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
iget v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDuration:I
if-ge v0, v3, :cond_41
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
float-to-int v0, v0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
invoke-static {v0}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getDeceleration(I)F
move-result v0
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
iget-wide v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
int-to-long v4, v0
add-long/2addr v2, v4
iput-wide v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
invoke-direct {p0}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->onEdgeReached()V
:goto_3d
invoke-virtual {p0}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->update()Z
return v1
:cond_41
return v2
.end method
.method extendDuration(I)V
.registers 6
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide v0
iget-wide v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
sub-long/2addr v0, v2
long-to-int v1, v0
add-int/2addr v1, p1
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
const/4 p1, 0x0
iput-boolean p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return-void
.end method
.method finish()V
.registers 2
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrentPosition:I
const/4 v0, 0x1
iput-boolean v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return-void
.end method
.method fling(IIIII)V
.registers 11
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
const/4 p5, 0x0
iput-boolean p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v0, p2
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDuration:I
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide v1
iput-wide v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrentPosition:I
if-gt p1, p4, :cond_51
if-ge p1, p3, :cond_1d
goto :goto_51
:cond_1d
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
const-wide/16 v1, 0x0
if-eqz p2, :cond_2f
invoke-direct {p0, p2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getSplineFlingDuration(I)I
move-result p5
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDuration:I
iput p5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
invoke-direct {p0, p2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->getSplineFlingDistance(I)D
move-result-wide v1
:cond_2f
invoke-static {v0}, Ljava/lang/Math;->signum(F)F
move-result p2
float-to-double v3, p2
mul-double v1, v1, v3
double-to-int p2, v1
iput p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDistance:I
add-int/2addr p1, p2
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
if-ge p1, p3, :cond_45
iget p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
invoke-direct {p0, p2, p1, p3}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->adjustDuration(III)V
iput p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
:cond_45
iget p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
if-le p1, p4, :cond_50
iget p2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
invoke-direct {p0, p2, p1, p4}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->adjustDuration(III)V
iput p4, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
:cond_50
return-void
:cond_51
:goto_51
invoke-direct {p0, p1, p3, p4, p2}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startAfterEdge(IIII)V
return-void
.end method
.method notifyEdgeReached(III)V
.registers 6
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
if-nez v0, :cond_12
iput p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide v0
iput-wide v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iget p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
float-to-int p3, p3
invoke-direct {p0, p1, p2, p2, p3}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startAfterEdge(IIII)V
:cond_12
return-void
.end method
.method setFinalPosition(I)V
.registers 2
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
const/4 p1, 0x0
iput-boolean p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
return-void
.end method
.method setFriction(F)V
.registers 2
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFlingFriction:F
return-void
.end method
.method springback(III)Z
.registers 8
const/4 v0, 0x1
iput-boolean v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
const/4 v1, 0x0
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide v2
iput-wide v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iput v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
if-ge p1, p2, :cond_18
invoke-direct {p0, p1, p2, v1}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startSpringback(III)V
goto :goto_1d
:cond_18
if-le p1, p3, :cond_1d
invoke-direct {p0, p1, p3, v1}, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->startSpringback(III)V
:cond_1d
:goto_1d
iget-boolean p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
xor-int/2addr p1, v0
return p1
.end method
.method startScroll(III)V
.registers 5
const/4 v0, 0x0
iput-boolean v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinished:Z
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
add-int/2addr p1, p2
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide p1
iput-wide p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
iput p3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
const/4 p1, 0x0
iput p1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
return-void
.end method
.method update()Z
.registers 10
invoke-static {}, Landroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
move-result-wide v0
iget-wide v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStartTime:J
sub-long/2addr v0, v2
iget v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDuration:I
int-to-long v3, v2
cmp-long v5, v0, v3
if-lez v5, :cond_10
const/4 v0, 0x0
return v0
:cond_10
const-wide/16 v3, 0x0
iget v5, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mState:I
const/high16 v6, 0x447a0000 # 1000.0f
const/4 v7, 0x1
if-eqz v5, :cond_65
const/high16 v8, 0x40000000 # 2.0f
if-eq v5, v7, :cond_39
const/4 v2, 0x2
if-eq v5, v2, :cond_22
goto/16 :goto_9d
:cond_22
long-to-float v0, v0
div-float/2addr v0, v6
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v2, v1
iget v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mDeceleration:F
mul-float v4, v3, v0
add-float/2addr v2, v4
iput v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
int-to-float v1, v1
mul-float v1, v1, v0
mul-float v3, v3, v0
mul-float v3, v3, v0
div-float/2addr v3, v8
add-float/2addr v1, v3
float-to-double v3, v1
goto :goto_9d
:cond_39
long-to-float v0, v0
int-to-float v1, v2
div-float/2addr v0, v1
mul-float v1, v0, v0
iget v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mVelocity:I
int-to-float v2, v2
invoke-static {v2}, Ljava/lang/Math;->signum(F)F
move-result v2
iget v3, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mOver:I
int-to-float v4, v3
mul-float v4, v4, v2
const/high16 v5, 0x40400000 # 3.0f
mul-float v5, v5, v1
mul-float v8, v8, v0
mul-float v8, v8, v1
sub-float/2addr v5, v8
mul-float v4, v4, v5
float-to-double v4, v4
int-to-float v3, v3
mul-float v2, v2, v3
const/high16 v3, 0x40c00000 # 6.0f
mul-float v2, v2, v3
neg-float v0, v0
add-float/2addr v0, v1
mul-float v2, v2, v0
iput v2, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
move-wide v3, v4
goto :goto_9d
:cond_65
long-to-float v0, v0
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDuration:I
int-to-float v1, v1
div-float/2addr v0, v1
const/high16 v1, 0x42c80000 # 100.0f
mul-float v2, v0, v1
float-to-int v2, v2
const/high16 v3, 0x3f800000 # 1.0f
const/4 v4, 0x0
const/16 v5, 0x64
if-ge v2, v5, :cond_8b
int-to-float v3, v2
div-float/2addr v3, v1
add-int/lit8 v4, v2, 0x1
int-to-float v5, v4
div-float/2addr v5, v1
sget-object v1, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->SPLINE_POSITION:[F
aget v2, v1, v2
aget v1, v1, v4
sub-float/2addr v1, v2
sub-float/2addr v5, v3
div-float v4, v1, v5
sub-float/2addr v0, v3
mul-float v0, v0, v4
add-float v3, v2, v0
:cond_8b
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDistance:I
int-to-float v1, v0
mul-float v3, v3, v1
float-to-double v1, v3
int-to-float v0, v0
mul-float v4, v4, v0
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mSplineDuration:I
int-to-float v0, v0
div-float/2addr v4, v0
mul-float v4, v4, v6
iput v4, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrVelocity:F
move-wide v3, v1
:goto_9d
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
invoke-static {v3, v4}, Ljava/lang/Math;->round(D)J
move-result-wide v1
long-to-int v2, v1
add-int/2addr v0, v2
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrentPosition:I
return v7
.end method
.method updateScroll(F)V
.registers 4
iget v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mStart:I
iget v1, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mFinal:I
sub-int/2addr v1, v0
int-to-float v1, v1
mul-float p1, p1, v1
invoke-static {p1}, Ljava/lang/Math;->round(F)I
move-result p1
add-int/2addr v0, p1
iput v0, p0, Lit/sephiroth/android/library/widget/OverScroller$SplineOverScroller;->mCurrentPosition:I
return-void
.end method