Skip to content

Commit

Permalink
dsabel touch event and scroll without data
Browse files Browse the repository at this point in the history
  • Loading branch information
giuseppesorce committed Nov 16, 2017
1 parent fa001d9 commit fc03dd2
Show file tree
Hide file tree
Showing 8 changed files with 194 additions and 138 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ public class AdaptiveTableLayout extends ViewGroup implements ScrollHelper.Scrol
*/
@Nullable
private TableInstanceSaver mSaver;
private boolean hasData= false;

public AdaptiveTableLayout(Context context) {
super(context);
Expand Down Expand Up @@ -304,6 +305,7 @@ public void setAdapter(@Nullable AdaptiveTableAdapter adapter) {
// register notify callbacks
mAdapter.registerDataSetObserver(this);
adapter.registerDataSetObserver(new DataSetObserverProxy(mAdapter));
hasData= adapter.getColumnCount() >0 && adapter.getRowCount() >0;
} else {
// remove adapter
mAdapter = null;
Expand Down Expand Up @@ -333,6 +335,7 @@ public void setAdapter(@Nullable DataAdaptiveTableLayoutAdapter adapter) {
mAdapter = adapter;

if (mAdapter != null) {
hasData= adapter.getColumnCount() >0 && adapter.getRowCount() >0;
mAdapter.registerDataSetObserver(this);
}

Expand Down Expand Up @@ -375,64 +378,67 @@ public void scrollTo(int x, int y) {
@Override
public void scrollBy(int x, int y) {
// block scroll one axle
int tempX = mState.isRowDragging() ? 0 : x;
int tempY = mState.isColumnDragging() ? 0 : y;

int diffX = tempX;
int diffY = tempY;

int shadowShiftX = mManager.getColumnCount() * mSettings.getCellMargin();
int shadowShiftY = mManager.getRowCount() * mSettings.getCellMargin();

long maxX = mManager.getFullWidth() + shadowShiftX;
long maxY = mManager.getFullHeight() + shadowShiftY;

if (mState.getScrollX() + tempX <= 0) {
// scroll over view to the left
diffX = mState.getScrollX();
mState.setScrollX(0);
} else if (mSettings.getLayoutWidth() > maxX) {
// few items and we have free space.
diffX = 0;
mState.setScrollX(0);
} else if (mState.getScrollX() + mSettings.getLayoutWidth() + tempX > maxX) {
// scroll over view to the right
diffX = (int) (maxX - mState.getScrollX() - mSettings.getLayoutWidth());

mState.setScrollX(mState.getScrollX() + diffX);
} else {
mState.setScrollX(mState.getScrollX() + tempX);
}

if (mState.getScrollY() + tempY <= 0) {
// scroll over view to the top
diffY = mState.getScrollY();
mState.setScrollY(0);
} else if (mSettings.getLayoutHeight() > maxY) {
// few items and we have free space.
diffY = 0;
mState.setScrollY(0);
} else if (mState.getScrollY() + mSettings.getLayoutHeight() + tempY > maxY) {
// scroll over view to the bottom
diffY = (int) (maxY - mState.getScrollY() - mSettings.getLayoutHeight());
mState.setScrollY(mState.getScrollY() + diffY);
} else {
mState.setScrollY(mState.getScrollY() + tempY);
}
if(hasDataApter()) {

if (diffX == 0 && diffY == 0) {
return;
}
int tempX = mState.isRowDragging() ? 0 : x;
int tempY = mState.isColumnDragging() ? 0 : y;

if (mAdapter != null) {
// refresh views
recycleViewHolders();
mVisibleArea.set(mState.getScrollX(),
mState.getScrollY(),
mState.getScrollX() + mSettings.getLayoutWidth(),
mState.getScrollY() + mSettings.getLayoutHeight());
addViewHolders(mVisibleArea);
refreshViewHolders();
int diffX = tempX;
int diffY = tempY;

int shadowShiftX = mManager.getColumnCount() * mSettings.getCellMargin();
int shadowShiftY = mManager.getRowCount() * mSettings.getCellMargin();

long maxX = mManager.getFullWidth() + shadowShiftX;
long maxY = mManager.getFullHeight() + shadowShiftY;

if (mState.getScrollX() + tempX <= 0) {
// scroll over view to the left
diffX = mState.getScrollX();
mState.setScrollX(0);
} else if (mSettings.getLayoutWidth() > maxX) {
// few items and we have free space.
diffX = 0;
mState.setScrollX(0);
} else if (mState.getScrollX() + mSettings.getLayoutWidth() + tempX > maxX) {
// scroll over view to the right
diffX = (int) (maxX - mState.getScrollX() - mSettings.getLayoutWidth());

mState.setScrollX(mState.getScrollX() + diffX);
} else {
mState.setScrollX(mState.getScrollX() + tempX);
}

if (mState.getScrollY() + tempY <= 0) {
// scroll over view to the top
diffY = mState.getScrollY();
mState.setScrollY(0);
} else if (mSettings.getLayoutHeight() > maxY) {
// few items and we have free space.
diffY = 0;
mState.setScrollY(0);
} else if (mState.getScrollY() + mSettings.getLayoutHeight() + tempY > maxY) {
// scroll over view to the bottom
diffY = (int) (maxY - mState.getScrollY() - mSettings.getLayoutHeight());
mState.setScrollY(mState.getScrollY() + diffY);
} else {
mState.setScrollY(mState.getScrollY() + tempY);
}

if (diffX == 0 && diffY == 0) {
return;
}

if (mAdapter != null) {
// refresh views
recycleViewHolders();
mVisibleArea.set(mState.getScrollX(),
mState.getScrollY(),
mState.getScrollX() + mSettings.getLayoutWidth(),
mState.getScrollY() + mSettings.getLayoutHeight());
addViewHolders(mVisibleArea);
refreshViewHolders();
}
}
}

Expand Down Expand Up @@ -1383,18 +1389,20 @@ public boolean onDown(MotionEvent e) {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// simple click event
ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
if (viewHolder != null) {
OnItemClickListener onItemClickListener = mAdapter.getOnItemClickListener();
if (onItemClickListener != null) {
if (viewHolder.getItemType() == ViewHolderType.ITEM) {
onItemClickListener.onItemClick(viewHolder.getRowIndex(), getBindColumn(viewHolder.getColumnIndex()));
} else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
onItemClickListener.onRowHeaderClick(viewHolder.getRowIndex());
} else if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
onItemClickListener.onColumnHeaderClick(getBindColumn(viewHolder.getColumnIndex()));
} else {
onItemClickListener.onLeftTopHeaderClick();
if(hasDataApter()) {
ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
if (viewHolder != null) {
OnItemClickListener onItemClickListener = mAdapter.getOnItemClickListener();
if (onItemClickListener != null) {
if (viewHolder.getItemType() == ViewHolderType.ITEM) {
onItemClickListener.onItemClick(viewHolder.getRowIndex(), getBindColumn(viewHolder.getColumnIndex()));
} else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
onItemClickListener.onRowHeaderClick(viewHolder.getRowIndex());
} else if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
onItemClickListener.onColumnHeaderClick(getBindColumn(viewHolder.getColumnIndex()));
} else {
onItemClickListener.onLeftTopHeaderClick();
}
}
}
}
Expand All @@ -1405,60 +1413,68 @@ public boolean onSingleTapUp(MotionEvent e) {
public void onLongPress(MotionEvent e) {
// prepare drag and drop
// search view holder by x, y
ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
if (viewHolder != null) {
if(hasDataApter()) {
ViewHolder viewHolder = getViewHolderByPosition((int) e.getX(), (int) e.getY());
if (viewHolder != null) {

if (!mSettings.isDragAndDropEnabled()) {
checkLongPressForItemAndFirstHeader(viewHolder);
return;
}
// save start dragging touch position
mDragAndDropPoints.setStart((int) (mState.getScrollX() + e.getX()), (int) (mState.getScrollY() + e.getY()));
if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
// dragging column header
mState.setRowDragging(false, viewHolder.getRowIndex());
mState.setColumnDragging(true, viewHolder.getColumnIndex());
if (!mSettings.isDragAndDropEnabled()) {
checkLongPressForItemAndFirstHeader(viewHolder);
return;
}
// save start dragging touch position
mDragAndDropPoints.setStart((int) (mState.getScrollX() + e.getX()), (int) (mState.getScrollY() + e.getY()));
if (viewHolder.getItemType() == ViewHolderType.COLUMN_HEADER) {
// dragging column header
mState.setRowDragging(false, viewHolder.getRowIndex());
mState.setColumnDragging(true, viewHolder.getColumnIndex());

// set dragging flags to column's view holder
setDraggingToColumn(viewHolder.getColumnIndex(), true);
// set dragging flags to column's view holder
setDraggingToColumn(viewHolder.getColumnIndex(), true);

mShadowHelper.removeColumnsHeadersShadow(this);
mShadowHelper.removeColumnsHeadersShadow(this);

mShadowHelper.addLeftShadow(this);
mShadowHelper.addRightShadow(this);
mShadowHelper.addLeftShadow(this);
mShadowHelper.addRightShadow(this);

// update view
refreshViewHolders();
// update view
refreshViewHolders();

} else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
// dragging column header
mState.setRowDragging(true, viewHolder.getRowIndex());
mState.setColumnDragging(false, viewHolder.getColumnIndex());
} else if (viewHolder.getItemType() == ViewHolderType.ROW_HEADER) {
// dragging column header
mState.setRowDragging(true, viewHolder.getRowIndex());
mState.setColumnDragging(false, viewHolder.getColumnIndex());

// set dragging flags to row's view holder
setDraggingToRow(viewHolder.getRowIndex(), true);
// set dragging flags to row's view holder
setDraggingToRow(viewHolder.getRowIndex(), true);

mShadowHelper.removeRowsHeadersShadow(this);
mShadowHelper.removeRowsHeadersShadow(this);

mShadowHelper.addTopShadow(this);
mShadowHelper.addBottomShadow(this);
mShadowHelper.addTopShadow(this);
mShadowHelper.addBottomShadow(this);

// update view
refreshViewHolders();
// update view
refreshViewHolders();

} else {
checkLongPressForItemAndFirstHeader(viewHolder);
} else {
checkLongPressForItemAndFirstHeader(viewHolder);
}
}
}
}

private boolean hasDataApter() {
return hasData;
}

private void checkLongPressForItemAndFirstHeader(ViewHolder viewHolder) {
OnItemLongClickListener onItemClickListener = mAdapter.getOnItemLongClickListener();
if (onItemClickListener != null) {
if (viewHolder.getItemType() == ViewHolderType.ITEM) {
onItemClickListener.onItemLongClick(viewHolder.getRowIndex(), viewHolder.getColumnIndex());
} else if (viewHolder.getItemType() == ViewHolderType.FIRST_HEADER) {
onItemClickListener.onLeftTopHeaderLongClick();
if(hasDataApter()) {
OnItemLongClickListener onItemClickListener = mAdapter.getOnItemLongClickListener();
if (onItemClickListener != null) {
if (viewHolder.getItemType() == ViewHolderType.ITEM) {
onItemClickListener.onItemLongClick(viewHolder.getRowIndex(), viewHolder.getColumnIndex());
} else if (viewHolder.getItemType() == ViewHolderType.FIRST_HEADER) {
onItemClickListener.onLeftTopHeaderLongClick();
}
}
}
}
Expand Down Expand Up @@ -1613,7 +1629,7 @@ private ViewHolder getViewHolderByPosition(int x, int y) {

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (!mState.isDragging()) {
if (!mState.isDragging() && hasDataApter()) {
// simple scroll....
if (!mScrollerRunnable.isFinished()) {
mScrollerRunnable.forceFinished();
Expand All @@ -1625,7 +1641,7 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float d

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (!mState.isDragging()) {
if (!mState.isDragging() && hasDataApter()) {
// simple fling
mScrollerRunnable.start(
mState.getScrollX(), mState.getScrollY(),
Expand Down
1 change: 1 addition & 0 deletions sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'

compile project(':library')
compile 'com.android.support.constraint:constraint-layout:1.0.2'
}
29 changes: 15 additions & 14 deletions sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cleveroad.sample">
package="com.cleveroad.sample">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:name=".SampleApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".SampleApplication"
android:theme="@style/AppTheme">

<activity
android:name="com.cleveroad.sample.ui.SampleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".ui.Activity"


><intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter></activity>
</application>

</manifest>
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AppEventsLogger.activateApp(this);
// AppEventsLogger.activateApp(this);
}
}
15 changes: 15 additions & 0 deletions sample/src/main/java/com/cleveroad/sample/ui/Activity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.cleveroad.sample.ui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.cleveroad.sample.R;

public class Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_);
}
}
Loading

0 comments on commit fc03dd2

Please sign in to comment.