You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/04/08 14:12:00 UTC
[1/5] incubator-weex git commit: * [android] slider improvement
Repository: incubator-weex
Updated Branches:
refs/heads/0.12-dev b5e467c04 -> 6e4dcfb96
* [android] slider improvement
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/01813d84
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/01813d84
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/01813d84
Branch: refs/heads/0.12-dev
Commit: 01813d84167711ed766043bb06c4e40d072c07e8
Parents: 86b8a50
Author: moxun.ljf <mo...@alibaba-inc.com>
Authored: Tue Mar 21 11:24:49 2017 +0800
Committer: moxun.ljf <mo...@alibaba-inc.com>
Committed: Tue Mar 21 11:24:49 2017 +0800
----------------------------------------------------------------------
.../com/taobao/weex/ui/component/WXSlider.java | 81 ++++++++++++++++++--
.../taobao/weex/ui/view/WXCircleViewPager.java | 10 ++-
2 files changed, 85 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/01813d84/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
index bab76b1..1749aa5 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
@@ -209,6 +209,8 @@ import android.support.annotation.NonNull;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.TextUtils;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -230,6 +232,7 @@ import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
+import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
@@ -239,6 +242,9 @@ import java.util.Map;
public class WXSlider extends WXVContainer<FrameLayout> {
public static final String INDEX = "index";
+ public static final String INFINITE = "infinite";
+
+ private boolean isInfinite = true;
Map<String, Object> params = new HashMap<>();
private float offsetXAccuracy = 0.1f;
@@ -283,13 +289,18 @@ public class WXSlider extends WXVContainer<FrameLayout> {
protected FrameLayout initComponentHostView(@NonNull Context context) {
FrameLayout view = new FrameLayout(context);
// init view pager
+ if (getDomObject() != null && getDomObject().getAttrs() != null) {
+ Object obj = getDomObject().getAttrs().get(INFINITE);
+ isInfinite = WXUtils.getBoolean(obj, true);
+ }
FrameLayout.LayoutParams pagerParams = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mViewPager = new WXCircleViewPager(context);
+ mViewPager.setCircle(isInfinite);
mViewPager.setLayoutParams(pagerParams);
// init adapter
- mAdapter = new WXCirclePageAdapter();
+ mAdapter = new WXCirclePageAdapter(isInfinite);
mViewPager.setAdapter(mAdapter);
// add to parent
view.addView(mViewPager);
@@ -328,9 +339,6 @@ public class WXSlider extends WXVContainer<FrameLayout> {
@Override
public void addEvent(String type) {
super.addEvent(type);
- if (getRealView() != null) {
- getRealView().setOnTouchListener(null);
- }
if (Constants.Event.SCROLL.equals(type)) {
if (mViewPager == null) {
return;
@@ -360,6 +368,8 @@ public class WXSlider extends WXVContainer<FrameLayout> {
return;
}
mAdapter.addPageView(view);
+ hackTwoItemsInfiniteScroll();
+
mViewPager.setCurrentItem(0);
if (mIndicator != null) {
mIndicator.getHostView().forceLayout();
@@ -374,7 +384,7 @@ public class WXSlider extends WXVContainer<FrameLayout> {
}
mAdapter.removePageView(child.getHostView());
- mAdapter.notifyDataSetChanged();
+ hackTwoItemsInfiniteScroll();
super.remove(child,destroy);
}
@@ -665,4 +675,65 @@ public class WXSlider extends WXVContainer<FrameLayout> {
}
}
}
+
+ private void hackTwoItemsInfiniteScroll() {
+ if (mViewPager == null || mAdapter == null) {
+ return;
+ }
+ if (isInfinite) {
+ if (mAdapter.getRealCount() == 2) {
+ final GestureDetector gestureDetector = new GestureDetector(getContext(), new FlingGestureListener(mViewPager));
+ mViewPager.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return gestureDetector.onTouchEvent(event);
+ }
+ });
+ } else {
+ mViewPager.setOnTouchListener(null);
+ }
+ }
+ }
+
+ private static class FlingGestureListener extends GestureDetector.SimpleOnGestureListener {
+ private static final int SWIPE_MIN_DISTANCE = WXViewUtils.dip2px(50);
+ private static final int SWIPE_MAX_OFF_PATH = WXViewUtils.dip2px(250);
+ private static final int SWIPE_THRESHOLD_VELOCITY = WXViewUtils.dip2px(200);
+ private WeakReference<WXCircleViewPager> pagerRef;
+
+ FlingGestureListener(WXCircleViewPager pager) {
+ this.pagerRef = new WeakReference<>(pager);
+ }
+
+ @Override
+ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+ WXCircleViewPager mViewPager = pagerRef.get();
+ if (mViewPager == null) {
+ return false;
+ }
+
+ try {
+ if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
+ return false;
+ }
+
+ if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
+ && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
+ && mViewPager.superGetCurrentItem() == 1) {
+ // right to left swipe
+ mViewPager.setCurrentItem(0, false);
+ return true;
+ } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
+ && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
+ && mViewPager.superGetCurrentItem() == 0) {
+ // left to right swipe
+ mViewPager.setCurrentItem(1, false);
+ return true;
+ }
+ } catch (Exception e) {
+ // ignore
+ }
+ return false;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/01813d84/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
index 2abf675..555adc8 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
@@ -468,6 +468,14 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
this.scrollable = scrollable;
}
+ private void showNextItem() {
+ if (getRealCount() == 2 && superGetCurrentItem() == 1) {
+ superSetCurrentItem(0, true);
+ } else {
+ superSetCurrentItem(superGetCurrentItem() + 1, true);
+ }
+ }
+
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
@@ -487,7 +495,7 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
WXLogUtils.d("[CircleViewPager] trigger auto play action");
WXCircleViewPager target;
if ((target = targetRef.get()) != null) {
- target.superSetCurrentItem(target.superGetCurrentItem() + 1, true);
+ target.showNextItem();
target.removeCallbacks(this);
target.postDelayed(this, intervalTime);
}
[4/5] incubator-weex git commit: Merge branch
'android-feature-slider-improvement' of github.com:misakuo/incubator-weex
into 0.12-dev This closes #143
Posted by so...@apache.org.
Merge branch 'android-feature-slider-improvement' of github.com:misakuo/incubator-weex into 0.12-dev
This closes #143
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4878c829
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4878c829
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4878c829
Branch: refs/heads/0.12-dev
Commit: 4878c8298596fb6d68db109171a44f91f306eb5e
Parents: b5e467c e28a195
Author: sospartan <so...@apache.org>
Authored: Sat Apr 8 21:56:00 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Sat Apr 8 21:56:00 2017 +0800
----------------------------------------------------------------------
.../com/taobao/weex/ui/component/WXSlider.java | 81 ++++++++++++++++++--
.../taobao/weex/ui/view/WXCircleViewPager.java | 21 +++--
test/pages/slider-infinite.we | 47 ++++++++++++
test/scripts/components/slider-infinite.test.js | 38 +++++++++
4 files changed, 176 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
[5/5] incubator-weex git commit: * [test] update slider testcase
Posted by so...@apache.org.
* [test] update slider testcase
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/6e4dcfb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6e4dcfb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6e4dcfb9
Branch: refs/heads/0.12-dev
Commit: 6e4dcfb962fd6605bd39209965fa7db6256a5455
Parents: 4878c82
Author: sospartan <so...@apache.org>
Authored: Sat Apr 8 22:11:42 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Sat Apr 8 22:11:42 2017 +0800
----------------------------------------------------------------------
test/pages/slider-infinite.vue | 49 ++++++++++++++++++++
test/pages/slider-infinite.we | 47 -------------------
test/scripts/components/slider-infinite.test.js | 2 +-
3 files changed, 50 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6e4dcfb9/test/pages/slider-infinite.vue
----------------------------------------------------------------------
diff --git a/test/pages/slider-infinite.vue b/test/pages/slider-infinite.vue
new file mode 100644
index 0000000..b65a889
--- /dev/null
+++ b/test/pages/slider-infinite.vue
@@ -0,0 +1,49 @@
+<template>
+ <div>
+ <text>{{d1}}</text>
+ <slider auto-play="true" @change="change" style="width: 750px;height: 400px;background-color: blue" interval="500" infinite="false">
+ <div style="flex: 1;background-color: beige;align-items: center;" v-for="item in items">
+ <text style="font-size: 60px;">
+ {{item}}
+ </text>
+ </div>
+ <indicator style="height: 20px"></indicator>
+ </slider>
+
+ <text style="margin-top:60">{{d2}}</text>
+ <slider auto-play="true" @change="change2" style="width: 750px;height: 400px;background-color: blue;" interval="500">
+ <div style="flex: 1;background-color: beige;align-items: center;" v-for="item in items">
+ <text style="font-size: 60px;">
+ {{item}}
+ </text>
+ </div>
+ <indicator style="height: 20px"></indicator>
+ </slider>
+ </div>
+</template>
+
+<script>
+ var itemCount = 2;
+ module.exports = {
+ data: function(){
+ return {
+ d1:0,
+ d2:0,
+ items: [],
+ }
+ },
+ created: function () {
+ for (var index = 0; index < itemCount ; index++) {
+ this.items[index] = 'Page: ' + index;
+ }
+ },
+ methods: {
+ change: function(e){
+ this.d1 = parseInt(this.d1) + 1;
+ },
+ change2: function(e) {
+ this.d2 = parseInt(this.d2) + 1;
+ }
+ }
+ }
+</script>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6e4dcfb9/test/pages/slider-infinite.we
----------------------------------------------------------------------
diff --git a/test/pages/slider-infinite.we b/test/pages/slider-infinite.we
deleted file mode 100644
index e4fc45d..0000000
--- a/test/pages/slider-infinite.we
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
- <div>
- <text>{{d1}}</text>
- <slider auto-play="true" onchange="change" style="width: 750px;height: 400px;background-color: blue" interval="500" infinite="false">
- <div style="flex: 1;background-color: beige;align-items: center;" repeat="{{item in items}}">
- <text style="font-size: 60px;">
- {{item}}
- </text>
- </div>
- <indicator style="height: 20px"></indicator>
- </slider>
-
- <text style="margin-top:60">{{d2}}</text>
- <slider auto-play="true" onchange="change2" style="width: 750px;height: 400px;background-color: blue;" interval="500">
- <div style="flex: 1;background-color: beige;align-items: center;" repeat="{{item in items}}">
- <text style="font-size: 60px;">
- {{item}}
- </text>
- </div>
- <indicator style="height: 20px"></indicator>
- </slider>
- </div>
-</template>
-
-<script>
- var itemCount = 2;
- module.exports = {
- data: {
- d1:0,
- d2:0,
- items: [],
- },
- methods: {
- ready: function () {
- for (var index = 0; index < itemCount ; index++) {
- this.items[index] = 'Page: ' + index;
- }
- },
- change: function(e){
- this.d1 = parseInt(this.d1) + 1;
- },
- change2: function(e) {
- this.d2 = parseInt(this.d2) + 1;
- }
- }
- }
-</script>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6e4dcfb9/test/scripts/components/slider-infinite.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/slider-infinite.test.js b/test/scripts/components/slider-infinite.test.js
index 1a14170..5c96d3a 100644
--- a/test/scripts/components/slider-infinite.test.js
+++ b/test/scripts/components/slider-infinite.test.js
@@ -13,7 +13,7 @@ describe('slider infinite scroll', function () {
before(function () {
return util.init(driver)
- .get('wxpage://' + util.getDeviceHost() +'/slider-infinite.js')
+ .get(util.getPage('/slider-infinite.js'))
.waitForElementByXPath('//div/text[1]',util.getGETActionWaitTimeMills(),1000)
});
[2/5] incubator-weex git commit: * [android] disable auto scroll on
not infinite
Posted by so...@apache.org.
* [android] disable auto scroll on not infinite
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/003e9ae2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/003e9ae2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/003e9ae2
Branch: refs/heads/0.12-dev
Commit: 003e9ae2c330da318090d02b229569ec5518ed51
Parents: 01813d8
Author: moxun.ljf <mo...@alibaba-inc.com>
Authored: Wed Mar 22 14:13:55 2017 +0800
Committer: moxun.ljf <mo...@alibaba-inc.com>
Committed: Wed Mar 22 14:13:55 2017 +0800
----------------------------------------------------------------------
.../src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/003e9ae2/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
index 555adc8..fe8446c 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
@@ -469,6 +469,9 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
}
private void showNextItem() {
+ if (!needLoop && superGetCurrentItem() == getRealCount() - 1) {
+ return;
+ }
if (getRealCount() == 2 && superGetCurrentItem() == 1) {
superSetCurrentItem(0, true);
} else {
[3/5] incubator-weex git commit: * [android] fix the invaild interval
time and add testcase
Posted by so...@apache.org.
* [android] fix the invaild interval time and add testcase
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e28a195b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e28a195b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e28a195b
Branch: refs/heads/0.12-dev
Commit: e28a195bb4ce24ae1b69f77a4eea73ccd6486cf0
Parents: 003e9ae
Author: moxun.ljf <fu...@foxmail.com>
Authored: Thu Mar 23 15:49:30 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Thu Mar 23 15:49:30 2017 +0800
----------------------------------------------------------------------
.../taobao/weex/ui/view/WXCircleViewPager.java | 8 ++--
test/pages/slider-infinite.we | 47 ++++++++++++++++++++
test/scripts/components/slider-infinite.test.js | 38 ++++++++++++++++
3 files changed, 88 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e28a195b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
index fe8446c..ef6106b 100755
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
@@ -233,7 +233,7 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
private boolean scrollable = true;
private int mState = ViewPager.SCROLL_STATE_IDLE;
- private Runnable scrollAction = new ScrollAction(this, intervalTime);
+ private Runnable scrollAction = new ScrollAction(this);
@SuppressLint("NewApi")
public WXCircleViewPager(Context context) {
@@ -487,10 +487,8 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
private static final class ScrollAction implements Runnable {
private WeakReference<WXCircleViewPager> targetRef;
- private long intervalTime;
- private ScrollAction(WXCircleViewPager target, long intervalTime) {
+ private ScrollAction(WXCircleViewPager target) {
this.targetRef = new WeakReference<>(target);
- this.intervalTime = intervalTime;
}
@Override
@@ -500,7 +498,7 @@ public class WXCircleViewPager extends ViewPager implements WXGestureObservable
if ((target = targetRef.get()) != null) {
target.showNextItem();
target.removeCallbacks(this);
- target.postDelayed(this, intervalTime);
+ target.postDelayed(this, target.getIntervalTime());
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e28a195b/test/pages/slider-infinite.we
----------------------------------------------------------------------
diff --git a/test/pages/slider-infinite.we b/test/pages/slider-infinite.we
new file mode 100644
index 0000000..e4fc45d
--- /dev/null
+++ b/test/pages/slider-infinite.we
@@ -0,0 +1,47 @@
+<template>
+ <div>
+ <text>{{d1}}</text>
+ <slider auto-play="true" onchange="change" style="width: 750px;height: 400px;background-color: blue" interval="500" infinite="false">
+ <div style="flex: 1;background-color: beige;align-items: center;" repeat="{{item in items}}">
+ <text style="font-size: 60px;">
+ {{item}}
+ </text>
+ </div>
+ <indicator style="height: 20px"></indicator>
+ </slider>
+
+ <text style="margin-top:60">{{d2}}</text>
+ <slider auto-play="true" onchange="change2" style="width: 750px;height: 400px;background-color: blue;" interval="500">
+ <div style="flex: 1;background-color: beige;align-items: center;" repeat="{{item in items}}">
+ <text style="font-size: 60px;">
+ {{item}}
+ </text>
+ </div>
+ <indicator style="height: 20px"></indicator>
+ </slider>
+ </div>
+</template>
+
+<script>
+ var itemCount = 2;
+ module.exports = {
+ data: {
+ d1:0,
+ d2:0,
+ items: [],
+ },
+ methods: {
+ ready: function () {
+ for (var index = 0; index < itemCount ; index++) {
+ this.items[index] = 'Page: ' + index;
+ }
+ },
+ change: function(e){
+ this.d1 = parseInt(this.d1) + 1;
+ },
+ change2: function(e) {
+ this.d2 = parseInt(this.d2) + 1;
+ }
+ }
+ }
+</script>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e28a195b/test/scripts/components/slider-infinite.test.js
----------------------------------------------------------------------
diff --git a/test/scripts/components/slider-infinite.test.js b/test/scripts/components/slider-infinite.test.js
new file mode 100644
index 0000000..1a14170
--- /dev/null
+++ b/test/scripts/components/slider-infinite.test.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('slider infinite scroll', function () {
+ this.timeout(util.getTimeoutMills());
+ var driver = util.createDriver(wd);
+
+ before(function () {
+ return util.init(driver)
+ .get('wxpage://' + util.getDeviceHost() +'/slider-infinite.js')
+ .waitForElementByXPath('//div/text[1]',util.getGETActionWaitTimeMills(),1000)
+ });
+
+ after(function () {
+ return util.quit(driver);
+ })
+
+
+ it('#1 waiting for auto play', () => {
+ return driver
+ .sleep(5000)
+ .elementByXPath('//div/text')
+ .text()
+ .then((text)=>{
+ var parts = text.split("-");
+ assert.equal(parts[0], 1);
+ assert.equal(parts[2] == 1, false);
+ })
+ })
+});
+
+