11package com .pluscubed .plustimer .ui ;
22
33import android .animation .Animator ;
4+ import android .animation .AnimatorListenerAdapter ;
45import android .animation .AnimatorSet ;
56import android .animation .ObjectAnimator ;
7+ import android .animation .ValueAnimator ;
68import android .app .Fragment ;
79import android .app .FragmentManager ;
810import android .graphics .Color ;
1921import android .view .animation .DecelerateInterpolator ;
2022import android .widget .AdapterView ;
2123import android .widget .ArrayAdapter ;
24+ import android .widget .FrameLayout ;
2225import android .widget .LinearLayout ;
2326import android .widget .Spinner ;
2427
2831import com .pluscubed .plustimer .model .PuzzleType ;
2932import com .pluscubed .plustimer .ui .widget .LockingViewPager ;
3033import com .pluscubed .plustimer .ui .widget .SlidingTabLayout ;
34+ import com .pluscubed .plustimer .utils .PrefUtils ;
3135
3236import io .fabric .sdk .android .Fabric ;
3337
@@ -50,6 +54,7 @@ public class CurrentSessionActivity extends DrawerActivity implements
5054 private boolean mInvalidateActionBarOnDrawerClosed ;
5155 private SlidingTabLayout mSlidingTabLayout ;
5256 private LockingViewPager mViewPager ;
57+ private int mContentFrameLayoutHeight ;
5358
5459 private static String makeFragmentName (int viewId , int index ) {
5560 return "android:switcher:" + viewId + ":" + index ;
@@ -59,70 +64,78 @@ public Toolbar getActionBarToolbar() {
5964 return super .getActionBarToolbar ();
6065 }
6166
67+ @ Override
68+ public FrameLayout getContentFrameLayout () {
69+ return (FrameLayout ) findViewById (R .id
70+ .activity_current_session_framelayout );
71+ }
72+
6273 @ Override
6374 public void playToolbarExitAnimation () {
64- final LinearLayout toolbar = (LinearLayout ) findViewById (R .id .activity_current_session_headerbar );
65- findViewById (R .id .activity_current_session_toolbarshadow ).setVisibility (View .GONE );
66- ObjectAnimator exit = ObjectAnimator .ofFloat (toolbar , View .Y ,
75+ final LinearLayout toolbar = (LinearLayout ) findViewById (R .id
76+ .activity_current_session_headerbar );
77+ final FrameLayout layout = (FrameLayout ) findViewById (R .id
78+ .activity_current_session_framelayout );
79+ mContentFrameLayoutHeight = layout .getHeight ();
80+
81+ ObjectAnimator exit = ObjectAnimator .ofFloat (toolbar , View .TRANSLATION_Y ,
6782 -toolbar .getHeight ());
6883 exit .setDuration (300 );
6984 exit .setInterpolator (new AccelerateInterpolator ());
70- AnimatorSet scrambleAnimatorSet = new AnimatorSet ();
71- scrambleAnimatorSet .play (exit );
72- scrambleAnimatorSet .addListener (new Animator .AnimatorListener () {
73- @ Override
74- public void onAnimationStart (Animator animation ) {
75-
76- }
77-
78- @ Override
79- public void onAnimationEnd (Animator animation ) {
80- if (toolbar .getY () == -toolbar .getHeight ()) {
81- toolbar .setVisibility (View .GONE );
82- }
83- }
84-
85+ exit .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
8586 @ Override
86- public void onAnimationCancel (Animator animation ) {
87-
88- }
89-
90- @ Override
91- public void onAnimationRepeat (Animator animation ) {
92-
87+ public void onAnimationUpdate (ValueAnimator animation ) {
88+ LinearLayout .LayoutParams params =
89+ (LinearLayout .LayoutParams ) layout .getLayoutParams ();
90+ params .height =
91+ mContentFrameLayoutHeight - (int ) (float ) animation .getAnimatedValue ();
92+ params .weight = 0 ;
93+ layout .setLayoutParams (params );
94+ layout .setTranslationY ((int ) (float ) animation .getAnimatedValue ());
9395 }
9496 });
97+
98+ AnimatorSet scrambleAnimatorSet = new AnimatorSet ();
99+ scrambleAnimatorSet .play (exit );
95100 scrambleAnimatorSet .start ();
96101 }
97102
98103 @ Override
99104 public void playToolbarEnterAnimation () {
100- final LinearLayout toolbar = (LinearLayout ) findViewById (R .id .activity_current_session_headerbar );
101- ObjectAnimator exit = ObjectAnimator .ofFloat (toolbar , View .Y , 0f );
105+ final LinearLayout toolbar = (LinearLayout ) findViewById (R .id
106+ .activity_current_session_headerbar );
107+ final FrameLayout layout = (FrameLayout ) findViewById (R .id
108+ .activity_current_session_framelayout );
109+
110+ ObjectAnimator exit = ObjectAnimator .ofFloat (toolbar , View .TRANSLATION_Y , 0f );
102111 exit .setDuration (300 );
103112 exit .setInterpolator (new DecelerateInterpolator ());
104- AnimatorSet scrambleAnimatorSet = new AnimatorSet ();
105- scrambleAnimatorSet .play (exit );
106- toolbar .setVisibility (View .VISIBLE );
107- scrambleAnimatorSet .addListener (new Animator .AnimatorListener () {
113+ exit .addUpdateListener (new ValueAnimator .AnimatorUpdateListener () {
108114 @ Override
109- public void onAnimationStart (Animator animation ) {
110-
115+ public void onAnimationUpdate (ValueAnimator animation ) {
116+ LinearLayout .LayoutParams params =
117+ (LinearLayout .LayoutParams ) layout .getLayoutParams ();
118+ params .height =
119+ mContentFrameLayoutHeight - (int ) (float ) animation .getAnimatedValue ();
120+ params .weight = 0 ;
121+ layout .setLayoutParams (params );
122+ layout .setTranslationY ((int ) (float ) animation .getAnimatedValue ());
111123 }
124+ });
112125
126+ AnimatorSet scrambleAnimatorSet = new AnimatorSet ();
127+ scrambleAnimatorSet .play (exit );
128+ toolbar .setVisibility (View .VISIBLE );
129+ scrambleAnimatorSet .addListener (new AnimatorListenerAdapter () {
113130 @ Override
114131 public void onAnimationEnd (Animator animation ) {
115- findViewById (R .id .activity_current_session_toolbarshadow ).setVisibility (View .VISIBLE );
116- }
117-
118- @ Override
119- public void onAnimationCancel (Animator animation ) {
120-
121- }
122-
123- @ Override
124- public void onAnimationRepeat (Animator animation ) {
125-
132+ if (toolbar .getTranslationY () == 0 ) {
133+ LinearLayout .LayoutParams params =
134+ (LinearLayout .LayoutParams ) layout .getLayoutParams ();
135+ params .height = 0 ;
136+ params .weight = 1 ;
137+ layout .setLayoutParams (params );
138+ }
126139 }
127140 });
128141 scrambleAnimatorSet .start ();
@@ -131,7 +144,8 @@ public void onAnimationRepeat(Animator animation) {
131144 @ Override
132145 public void lockDrawerAndViewPager (boolean lock ) {
133146 mSlidingTabLayout .setClickEnabled (!lock );
134- mViewPager .setPagingEnabled (!lock );
147+ if (!PrefUtils .isLockSwipingEnabled (this ))
148+ mViewPager .setPagingEnabled (!lock );
135149 lockDrawer (lock );
136150 }
137151
@@ -207,7 +221,6 @@ public void onPageScrollStateChanged(int state) {
207221 if (state == ViewPager .SCROLL_STATE_DRAGGING || state ==
208222 ViewPager .SCROLL_STATE_SETTLING ) {
209223 getCurrentSessionTimerFragment ().stopHoldTimer ();
210- getCurrentSessionTimerFragment ().playEnterAnimations ();
211224 getSolveListFragment ().finishActionMode ();
212225 }
213226 }
@@ -225,6 +238,7 @@ protected void onResume() {
225238 // TODO: Only update Spinner, not invalidate whole action bar
226239 // When puzzle types are enabled/disabled, update Spinner
227240 queueInvalidateOptionsMenu ();
241+ mViewPager .setPagingEnabled (!PrefUtils .isLockSwipingEnabled (this ));
228242 }
229243
230244 private CurrentSessionTimerFragment getCurrentSessionTimerFragment () {
@@ -267,7 +281,6 @@ protected void onNavDrawerClosed() {
267281 protected void onNavDrawerSlide (float offset ) {
268282 getSolveListFragment ().finishActionMode ();
269283 getCurrentSessionTimerFragment ().stopHoldTimer ();
270- getCurrentSessionTimerFragment ().playEnterAnimations ();
271284 }
272285
273286 @ Override
@@ -284,7 +297,7 @@ public boolean onCreateOptionsMenu(Menu menu) {
284297 }
285298 getMenuInflater ().inflate (R .menu .menu_current_session , menu );
286299
287- Spinner menuPuzzleSpinner = (Spinner ) MenuItemCompat .getActionView
300+ final Spinner menuPuzzleSpinner = (Spinner ) MenuItemCompat .getActionView
288301 (menu .findItem (R .id
289302 .menu_activity_current_session_puzzletype_spinner ));
290303 ArrayAdapter <PuzzleType > puzzleTypeSpinnerAdapter = new
@@ -298,11 +311,12 @@ public boolean onCreateOptionsMenu(Menu menu) {
298311 @ Override
299312 public void onItemSelected (AdapterView <?> parent , View view ,
300313 int position , long id ) {
301- PuzzleType .getCurrent ().getSession (PuzzleType .CURRENT_SESSION )
302- .unregisterAllObservers ();
303- PuzzleType .setCurrent ((PuzzleType ) parent .getItemAtPosition
304- (position ), CurrentSessionActivity .this );
305-
314+ PuzzleType newPuzzleType = (PuzzleType ) parent .getItemAtPosition (position );
315+ if (newPuzzleType != PuzzleType .getCurrent ()) {
316+ PuzzleType .getCurrent ().getSession (PuzzleType .CURRENT_SESSION )
317+ .unregisterAllObservers ();
318+ PuzzleType .setCurrent (newPuzzleType , CurrentSessionActivity .this );
319+ }
306320 }
307321
308322 @ Override
0 commit comments