Skip to content

Commit dc4fb43

Browse files
committed
Merge branch 'release/v0.2.4'
2 parents fb0bc06 + d08a715 commit dc4fb43

47 files changed

Lines changed: 850 additions & 588 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/build.gradle

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ task syncTask(type: Sync) {
2525
preBuild.dependsOn('syncTask')
2626

2727
android {
28-
compileSdkVersion 21
29-
buildToolsVersion '21.1.2'
28+
compileSdkVersion 22
29+
buildToolsVersion '22.0.1'
3030
defaultConfig {
3131
applicationId "com.pluscubed.plustimer"
3232
minSdkVersion 14
33-
targetSdkVersion 21
34-
versionCode 21
35-
versionName '0.2.3'
33+
targetSdkVersion 22
34+
versionCode 22
35+
versionName '0.2.4'
3636
}
3737

3838
if (project.hasProperty("RELEASE_STORE_FILE")) {
@@ -47,13 +47,14 @@ android {
4747
}
4848

4949
buildTypes {
50-
//noinspection GroovyMissingReturnStatement
5150
release {
5251
minifyEnabled true
5352
shrinkResources true
5453
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
5554
if (project.hasProperty("RELEASE_STORE_FILE")) {
5655
signingConfig signingConfigs.release
56+
} else {
57+
signingConfig signingConfigs.debug
5758
}
5859
}
5960
debug {
@@ -80,12 +81,12 @@ android {
8081

8182
dependencies {
8283
compile 'com.jjoe64:graphview:3.+'
83-
compile 'com.android.support:appcompat-v7:21.+'
84-
compile 'com.android.support:support-v13:21.+'
85-
compile 'com.android.support:recyclerview-v7:21.+'
84+
compile 'com.android.support:appcompat-v7:22.+'
85+
compile 'com.android.support:support-v13:22.+'
86+
compile 'com.android.support:recyclerview-v7:22.+'
8687
compile 'com.github.cubing:tnoodle-android:0.+@aar'
8788
compile 'com.caverock:androidsvg:1.2.1'
88-
compile 'com.android.support:support-annotations:21.+'
89+
compile 'com.android.support:support-annotations:22.+'
8990
compile fileTree(dir: 'libs', include: ['*.jar'])
9091
compile 'com.google.code.gson:gson:2.+'
9192
compile 'com.afollestad:material-dialogs:0.+'

app/src/main/assets/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

app/src/main/java/com/pluscubed/plustimer/model/PuzzleType.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,17 @@ public Session deserialize(JsonElement json, Type typeOfT,
172172
throws JsonParseException {
173173

174174
Gson gson = new GsonBuilder()
175-
.registerTypeAdapter(ScrambleAndSvg.class, new JsonDeserializer<ScrambleAndSvg>() {
176-
@Override
177-
public ScrambleAndSvg deserialize(JsonElement json, Type typeOfT,
178-
JsonDeserializationContext context)
179-
throws JsonParseException {
180-
return new ScrambleAndSvg(json.getAsJsonPrimitive().getAsString(), null);
181-
}
182-
}).create();
175+
.registerTypeAdapter(ScrambleAndSvg.class, new
176+
JsonDeserializer<ScrambleAndSvg>() {
177+
@Override
178+
public ScrambleAndSvg deserialize(JsonElement json,
179+
Type typeOfT,
180+
JsonDeserializationContext context)
181+
throws JsonParseException {
182+
return new ScrambleAndSvg(json.getAsJsonPrimitive
183+
().getAsString(), null);
184+
}
185+
}).create();
183186

184187
Session s = gson.fromJson(json, typeOfT);
185188
for (final Solve solve : s.getSolves()) {

app/src/main/java/com/pluscubed/plustimer/ui/CurrentSessionActivity.java

Lines changed: 67 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.pluscubed.plustimer.ui;
22

33
import android.animation.Animator;
4+
import android.animation.AnimatorListenerAdapter;
45
import android.animation.AnimatorSet;
56
import android.animation.ObjectAnimator;
7+
import android.animation.ValueAnimator;
68
import android.app.Fragment;
79
import android.app.FragmentManager;
810
import android.graphics.Color;
@@ -19,6 +21,7 @@
1921
import android.view.animation.DecelerateInterpolator;
2022
import android.widget.AdapterView;
2123
import android.widget.ArrayAdapter;
24+
import android.widget.FrameLayout;
2225
import android.widget.LinearLayout;
2326
import android.widget.Spinner;
2427

@@ -28,6 +31,7 @@
2831
import com.pluscubed.plustimer.model.PuzzleType;
2932
import com.pluscubed.plustimer.ui.widget.LockingViewPager;
3033
import com.pluscubed.plustimer.ui.widget.SlidingTabLayout;
34+
import com.pluscubed.plustimer.utils.PrefUtils;
3135

3236
import 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

Comments
 (0)