diff --git a/AndroidSwipeLayout.zip b/AndroidSwipeLayout.zip
new file mode 100644
index 00000000..eb9b912b
Binary files /dev/null and b/AndroidSwipeLayout.zip differ
diff --git a/build.gradle b/build.gradle
index 82697f55..794e09a6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,9 +6,13 @@ buildscript {
maven {
url "https://jitpack.io"
}
+ maven {
+ url 'https://maven.google.com/'
+ name 'Google'
+ }
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.0'
+ classpath 'com.android.tools.build:gradle:4.2.2'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
// NOTE: Do not place your application dependencies here; they belong
@@ -22,5 +26,9 @@ allprojects {
maven {
url "https://jitpack.io"
}
+ maven {
+ url 'https://maven.google.com/'
+ name 'Google'
+ }
}
}
diff --git a/demo/build.gradle b/demo/build.gradle
index 09dca2ba..7f2ee73d 100644
--- a/demo/build.gradle
+++ b/demo/build.gradle
@@ -5,7 +5,7 @@ repositories {
}
android {
- compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
+ compileSdkVersion 28
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
@@ -25,11 +25,29 @@ android {
}
dependencies {
- compile project(":library")
- compile 'com.android.support:recyclerview-v7:25.1.1'
- compile 'com.daimajia.easing:library:1.0.0@aar'
- compile 'com.daimajia.androidanimations:library:1.1.2@aar'
- compile 'com.nineoldandroids:library:2.4.0'
+ def glide_version = "4.3.1"
+ def view_model_version = "1.1.0"
+ def support_version = "27.1.0"
+
+ implementation project(":library")
+ implementation "com.android.support:appcompat-v7:$support_version"
+ implementation 'androidx.recyclerview:recyclerview:1.0.0'
+ implementation 'com.daimajia.easing:library:1.0.0@aar'
+ implementation 'com.daimajia.androidanimations:library:1.1.2@aar'
+ implementation 'com.nineoldandroids:library:2.4.0'
// This dude gave a shoutout to you (daimajia) on his github page:
- compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
+ implementation 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
+
+ //adding glide
+ implementation "com.github.bumptech.glide:glide:$glide_version"
+ annotationProcessor "com.github.bumptech.glide:compiler:$glide_version"
+
+ //adding retrofit
+ implementation 'com.squareup.retrofit2:retrofit:2.4.0'
+ implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
+
+ //adding view model
+ implementation "android.arch.lifecycle:extensions:$view_model_version"
+ implementation "android.arch.lifecycle:viewmodel:$view_model_version"
+ implementation 'androidx.paging:paging-runtime:2.1.2'
}
diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml
index 0f57bf1a..58dc888f 100644
--- a/demo/src/main/AndroidManifest.xml
+++ b/demo/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.daimajia.swipedemo">
+
+
diff --git a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
index 42fae4da..d041ed10 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
@@ -7,10 +7,12 @@
import android.widget.AdapterView;
import android.widget.GridView;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.GridViewAdapter;
-public class GridViewExample extends Activity{
+public class GridViewExample extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
index f957fc8d..931593fd 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
@@ -16,11 +16,13 @@
import android.widget.ListView;
import android.widget.Toast;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.ListViewAdapter;
-public class ListViewExample extends Activity {
+public class ListViewExample extends AppCompatActivity {
private ListView mListView;
private ListViewAdapter mAdapter;
diff --git a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
index 8a476218..e35c3d1d 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
@@ -10,10 +10,12 @@
import android.view.View;
import android.widget.Toast;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.daimajia.swipe.SwipeLayout;
import com.nineoldandroids.view.ViewHelper;
-public class MyActivity extends Activity {
+public class MyActivity extends AppCompatActivity {
private SwipeLayout sample1, sample2, sample3;
@@ -183,6 +185,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
} else if (id == R.id.action_recycler) {
startActivity(new Intent(this, RecyclerViewExample.class));
+ } else if (id == R.id.action_recycler_paged) {
+ startActivity(new Intent(this, RecyclerViewPagedExample.class));
}
return super.onOptionsItemSelected(item);
}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java
index 43910972..510bd30b 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/NestedExample.java
@@ -5,9 +5,11 @@
import android.view.View;
import android.widget.Toast;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.daimajia.swipe.SwipeLayout;
-public class NestedExample extends Activity{
+public class NestedExample extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java
index fd42733f..17489417 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java
@@ -5,12 +5,14 @@
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.RecyclerViewAdapter;
import com.daimajia.swipedemo.adapter.util.DividerItemDecoration;
@@ -20,7 +22,7 @@
import jp.wasabeef.recyclerview.animators.FadeInLeftAnimator;
-public class RecyclerViewExample extends Activity {
+public class RecyclerViewExample extends AppCompatActivity {
/**
* RecyclerView: The new recycler view replaces the list view. Its more modular and therefore we
diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java
new file mode 100644
index 00000000..b37f97f8
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewPagedExample.java
@@ -0,0 +1,105 @@
+package com.daimajia.swipedemo;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProviders;
+import androidx.paging.PagedList;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.daimajia.swipedemo.adapter.PagedItemAdapter;
+import com.daimajia.swipedemo.models.Item;
+import com.daimajia.swipedemo.retrofit.ItemViewModel;
+
+import java.util.ArrayList;
+
+public class RecyclerViewPagedExample extends AppCompatActivity {
+
+ /**
+ * RecyclerView: The new recycler view replaces the list view. Its more modular and therefore we
+ * must implement some of the functionality ourselves and attach it to our recyclerview.
+ *
+ * 1) Position items on the screen: This is done with LayoutManagers
+ * 2) Animate & Decorate views: This is done with ItemAnimators & ItemDecorators
+ * 3) Handle any touch events apart from scrolling: This is now done in our adapter's ViewHolder
+ */
+
+ private RecyclerView recyclerView;
+ private RecyclerView.Adapter mAdapter;
+
+ private ArrayList mDataSet;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.recyclerview);
+ recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setTitle("RecyclerView");
+ }
+ }
+
+ //setting up recyclerview
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setHasFixedSize(true);
+
+ //getting our ItemViewModel
+ ItemViewModel itemViewModel = ViewModelProviders.of(this).get(ItemViewModel.class);
+
+ //creating the Adapter
+ final PagedItemAdapter adapter = new PagedItemAdapter(this);
+
+
+ //observing the itemPagedList from view model
+ itemViewModel.itemPagedList.observe(this, new Observer>() {
+ @Override
+ public void onChanged(@Nullable PagedList- items) {
+
+ //in case of any changes
+ //submitting the items to adapter
+ adapter.submitList(items);
+ }
+ });
+
+ //setting the adapter
+ recyclerView.setAdapter(adapter);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.my, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+ if (id == R.id.action_listview) {
+ startActivity(new Intent(this, ListViewExample.class));
+ finish();
+ return true;
+ } else if (id == R.id.action_gridview) {
+ startActivity(new Intent(this, GridViewExample.class));
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java
new file mode 100644
index 00000000..1c6a3591
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/PagedItemAdapter.java
@@ -0,0 +1,81 @@
+package com.daimajia.swipedemo.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.DiffUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.daimajia.swipe.adapters.PagedListSwipeAdapter;
+import com.daimajia.swipedemo.R;
+import com.daimajia.swipedemo.models.Item;
+
+public class PagedItemAdapter extends PagedListSwipeAdapter
- {
+
+ private Context mCtx;
+
+
+ public PagedItemAdapter(Context mCtx) {
+ super(DIFF_CALLBACK);
+ this.mCtx = mCtx;
+ }
+
+ @NonNull
+ @Override
+ public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_users, parent, false);
+ return new ItemViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
+ Item item = getItem(position);
+
+ if (item != null) {
+ holder.textView.setText(item.owner.display_name);
+ Glide.with(mCtx)
+ .load(item.owner.profile_image)
+ .into(holder.imageView);
+ } else {
+ Toast.makeText(mCtx, "Item is null", Toast.LENGTH_LONG).show();
+ }
+ }
+
+ private static DiffUtil.ItemCallback
- DIFF_CALLBACK =
+ new DiffUtil.ItemCallback
- () {
+ @Override
+ public boolean areItemsTheSame(Item oldItem, Item newItem) {
+ return oldItem.question_id == newItem.question_id;
+ }
+
+ @Override
+ public boolean areContentsTheSame(Item oldItem, Item newItem) {
+ return oldItem.equals(newItem);
+ }
+ };
+
+ @Override
+ public int getSwipeLayoutResourceId(int position) {
+ return R.id.swipe;
+ }
+
+
+ class ItemViewHolder extends RecyclerView.ViewHolder {
+
+ TextView textView;
+ ImageView imageView;
+
+ public ItemViewHolder(View itemView) {
+ super(itemView);
+ textView = itemView.findViewById(R.id.textViewName);
+ imageView = itemView.findViewById(R.id.imageView);
+ }
+ }
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java
index 3b4c34d4..20d2bb7a 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewAdapter.java
@@ -1,7 +1,6 @@
package com.daimajia.swipedemo.adapter;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -10,6 +9,8 @@
import android.widget.TextView;
import android.widget.Toast;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;
import com.daimajia.swipe.SimpleSwipeListener;
@@ -61,7 +62,7 @@ public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
}
@Override
- public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) {
+ public void onBindViewHolder(SimpleViewHolder viewHolder, int position) {
String item = mDataset.get(position);
viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java
index 85b5b3d2..e2812ec9 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/DividerItemDecoration.java
@@ -5,11 +5,12 @@
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java
index 613e8e52..de2d5725 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/util/RecyclerItemClickListener.java
@@ -1,11 +1,12 @@
package com.daimajia.swipedemo.adapter.util;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
+import androidx.recyclerview.widget.RecyclerView;
+
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/Item.java b/demo/src/main/java/com/daimajia/swipedemo/models/Item.java
new file mode 100644
index 00000000..c144c550
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/models/Item.java
@@ -0,0 +1,11 @@
+package com.daimajia.swipedemo.models;
+
+public class Item {
+ public Owner owner;
+ public boolean is_accepted;
+ public int score;
+ public long last_activity_date;
+ public long creation_date;
+ public long answer_id;
+ public long question_id;
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java b/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java
new file mode 100644
index 00000000..af4e4c12
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/models/Owner.java
@@ -0,0 +1,10 @@
+package com.daimajia.swipedemo.models;
+
+public class Owner {
+ public int reputation;
+ public long user_id;
+ public String user_type;
+ public String profile_image;
+ public String display_name;
+ public String link;
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java b/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java
new file mode 100644
index 00000000..ef1e18a3
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/models/StackApiResponse.java
@@ -0,0 +1,10 @@
+package com.daimajia.swipedemo.models;
+
+import java.util.List;
+
+public class StackApiResponse {
+ public List
- items;
+ public boolean has_more;
+ public int quota_max;
+ public int quota_remaining;
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java
new file mode 100644
index 00000000..02255c56
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/Api.java
@@ -0,0 +1,13 @@
+package com.daimajia.swipedemo.retrofit;
+
+import com.daimajia.swipedemo.models.StackApiResponse;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface Api {
+
+ @GET("answers")
+ Call getAnswers(@Query("page") int page, @Query("pagesize") int pagesize, @Query("site") String site);
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java
new file mode 100644
index 00000000..e548e1f9
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSource.java
@@ -0,0 +1,98 @@
+package com.daimajia.swipedemo.retrofit;
+
+import androidx.annotation.NonNull;
+import androidx.paging.PageKeyedDataSource;
+
+import com.daimajia.swipedemo.models.Item;
+import com.daimajia.swipedemo.models.StackApiResponse;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class ItemDataSource extends PageKeyedDataSource {
+ //the size of a page that we want
+ public static final int PAGE_SIZE = 50;
+
+ //we will start from the first page which is 1
+ private static final int FIRST_PAGE = 1;
+
+ //we need to fetch from stackoverflow
+ private static final String SITE_NAME = "stackoverflow";
+
+
+ //this will be called once to load the initial data
+ @Override
+ public void loadInitial(@NonNull LoadInitialParams params, @NonNull final LoadInitialCallback callback) {
+ RetrofitClient.getInstance()
+ .getApi().getAnswers(FIRST_PAGE, PAGE_SIZE, SITE_NAME)
+ .enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ if (response.body() != null) {
+ callback.onResult(response.body().items, null, FIRST_PAGE + 1);
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+
+ //this will load the previous page
+ @Override
+ public void loadBefore(@NonNull final LoadParams params, @NonNull final LoadCallback callback) {
+ RetrofitClient.getInstance()
+ .getApi().getAnswers(params.key, PAGE_SIZE, SITE_NAME)
+ .enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+
+ //if the current page is greater than one
+ //we are decrementing the page number
+ //else there is no previous page
+ Integer adjacentKey = (params.key > 1) ? params.key - 1 : null;
+ if (response.body() != null) {
+
+ //passing the loaded data
+ //and the previous page key
+ callback.onResult(response.body().items, adjacentKey);
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+
+ //this will load the next page
+ @Override
+ public void loadAfter(@NonNull final LoadParams params, @NonNull final LoadCallback callback) {
+ RetrofitClient.getInstance()
+ .getApi()
+ .getAnswers(params.key, PAGE_SIZE, SITE_NAME)
+ .enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+
+ if (response.body() != null) {
+ //if the response has next page
+ //incrementing the next page number
+ Integer key = response.body().has_more ? params.key + 1 : null;
+
+ //passing the loaded data and next page value
+ callback.onResult(response.body().items, key);
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+
+ }
+ });
+ }
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java
new file mode 100644
index 00000000..6c32d4ae
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemDataSourceFactory.java
@@ -0,0 +1,32 @@
+package com.daimajia.swipedemo.retrofit;
+
+
+import androidx.lifecycle.MutableLiveData;
+import androidx.paging.DataSource;
+import androidx.paging.PageKeyedDataSource;
+
+import com.daimajia.swipedemo.models.Item;
+
+public class ItemDataSourceFactory extends DataSource.Factory {
+
+ //creating the mutable live data
+ private MutableLiveData> itemLiveDataSource = new MutableLiveData<>();
+
+ @Override
+ public DataSource create() {
+ //getting our data source object
+ ItemDataSource itemDataSource = new ItemDataSource();
+
+ //posting the datasource to get the values
+ itemLiveDataSource.postValue(itemDataSource);
+
+ //returning the datasource
+ return itemDataSource;
+ }
+
+
+ //getter for itemlivedatasource
+ public MutableLiveData> getItemLiveDataSource() {
+ return itemLiveDataSource;
+ }
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java
new file mode 100644
index 00000000..dce30864
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/ItemViewModel.java
@@ -0,0 +1,35 @@
+package com.daimajia.swipedemo.retrofit;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.ViewModel;
+import androidx.paging.LivePagedListBuilder;
+import androidx.paging.PageKeyedDataSource;
+import androidx.paging.PagedList;
+
+import com.daimajia.swipedemo.models.Item;
+
+public class ItemViewModel extends ViewModel {
+
+ //creating livedata for PagedList and PagedKeyedDataSource
+ public LiveData> itemPagedList;
+ LiveData> liveDataSource;
+
+ //constructor
+ public ItemViewModel() {
+ //getting our data source factory
+ ItemDataSourceFactory itemDataSourceFactory = new ItemDataSourceFactory();
+
+ //getting the live data source from data source factory
+ liveDataSource = itemDataSourceFactory.getItemLiveDataSource();
+
+ //Getting PagedList config
+ PagedList.Config pagedListConfig =
+ (new PagedList.Config.Builder())
+ .setEnablePlaceholders(false)
+ .setPageSize(ItemDataSource.PAGE_SIZE).build();
+
+ //Building the paged list
+ itemPagedList = (new LivePagedListBuilder(itemDataSourceFactory, pagedListConfig))
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java b/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java
new file mode 100644
index 00000000..a1f16b39
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/retrofit/RetrofitClient.java
@@ -0,0 +1,32 @@
+package com.daimajia.swipedemo.retrofit;
+
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+public class RetrofitClient {
+
+ private static final String BASE_URL = "https://api.stackexchange.com/2.2/";
+ private static RetrofitClient mInstance;
+ private Retrofit retrofit;
+
+
+ private RetrofitClient() {
+ retrofit = new Retrofit.Builder()
+ .baseUrl(BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create())
+ .build();
+ }
+
+ public static synchronized RetrofitClient getInstance() {
+ if (mInstance == null) {
+ mInstance = new RetrofitClient();
+ }
+ return mInstance;
+ }
+
+ public Api getApi() {
+ return retrofit.create(Api.class);
+ }
+}
+
diff --git a/demo/src/main/res/layout/recyclerview.xml b/demo/src/main/res/layout/recyclerview.xml
index 3f1387f0..b72729d0 100644
--- a/demo/src/main/res/layout/recyclerview.xml
+++ b/demo/src/main/res/layout/recyclerview.xml
@@ -1,6 +1,5 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/src/main/res/menu/my.xml b/demo/src/main/res/menu/my.xml
index df546330..406a14c2 100644
--- a/demo/src/main/res/menu/my.xml
+++ b/demo/src/main/res/menu/my.xml
@@ -13,6 +13,11 @@
android:id="@+id/action_recycler"
android:orderInCategory="100"
android:title="RecyclerView" />
+
+
diff --git a/demo/src/main/res/values/styles.xml b/demo/src/main/res/values/styles.xml
index c049daee..58a2646e 100644
--- a/demo/src/main/res/values/styles.xml
+++ b/demo/src/main/res/values/styles.xml
@@ -1,7 +1,7 @@
-
diff --git a/gradle.properties b/gradle.properties
index beab8970..1424cf61 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -22,7 +22,9 @@ VERSION_NAME=1.2.0
VERSION_CODE=22
GROUP=com.daimajia.swipelayout
-ANDROID_BUILD_MIN_SDK_VERSION=9
+ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=25
ANDROID_BUILD_SDK_VERSION=25
ANDROID_BUILD_TOOLS_VERSION=25.0.2
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 776d2a5a..71fa847e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu Mar 09 16:07:03 CST 2017
+#Thu Aug 05 15:32:17 IST 2021
distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+zipStoreBase=GRADLE_USER_HOME
diff --git a/library/build.gradle b/library/build.gradle
index 906272e1..f48078ab 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -5,14 +5,16 @@ android {
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {
+ compileSdkVersion 28
minSdkVersion 9
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
}
}
dependencies {
- compile 'com.android.support:recyclerview-v7:25.2.0'
- compile 'com.android.support:support-v4:25.2.0'
+ implementation 'androidx.recyclerview:recyclerview:1.0.0'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'androidx.paging:paging-runtime:2.1.2'
}
apply from: './gradle-mvn-push.gradle'
diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java
index 6703123c..12c53bc8 100644
--- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java
+++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java
@@ -3,9 +3,6 @@
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.ViewDragHelper;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.Gravity;
@@ -19,6 +16,10 @@
import android.widget.AdapterView;
import android.widget.FrameLayout;
+import androidx.core.view.GravityCompat;
+import androidx.core.view.ViewCompat;
+import androidx.customview.widget.ViewDragHelper;
+
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
index 3e6a62c7..8063a9b4 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
@@ -2,10 +2,11 @@
import android.content.Context;
import android.database.Cursor;
-import android.support.v4.widget.CursorAdapter;
import android.view.View;
import android.view.ViewGroup;
+import androidx.cursoradapter.widget.CursorAdapter;
+
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/PagedListSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/PagedListSwipeAdapter.java
new file mode 100644
index 00000000..1ee32b8f
--- /dev/null
+++ b/library/src/main/java/com/daimajia/swipe/adapters/PagedListSwipeAdapter.java
@@ -0,0 +1,97 @@
+package com.daimajia.swipe.adapters;
+
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.DiffUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import androidx.paging.PagedListAdapter;
+
+import com.daimajia.swipe.SwipeLayout;
+import com.daimajia.swipe.implments.SwipeItemMangerImpl;
+import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
+import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
+
+import java.util.List;
+
+public abstract class PagedListSwipeAdapter
+ extends PagedListAdapter implements SwipeItemMangerInterface, SwipeAdapterInterface {
+
+ public SwipeItemMangerImpl mItemManger = new SwipeItemMangerImpl(this);
+
+ protected PagedListSwipeAdapter(@NonNull DiffUtil.ItemCallback diffCallback) {
+ super(diffCallback);
+ }
+
+
+ @Nullable
+ @Override
+ public T getItem(int position) {
+ return super.getItem(position);
+ }
+
+ @Override
+ public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);
+
+ @Override
+ public abstract void onBindViewHolder(VH viewHolder, final int position);
+
+ @Override
+ public void notifyDatasetChanged() {
+ super.notifyDataSetChanged();
+ }
+
+ @Override
+ public void openItem(int position) {
+ mItemManger.openItem(position);
+ }
+
+ @Override
+ public void closeItem(int position) {
+ mItemManger.closeItem(position);
+ }
+
+ @Override
+ public void closeAllExcept(SwipeLayout layout) {
+ mItemManger.closeAllExcept(layout);
+ }
+
+ @Override
+ public void closeAllItems() {
+ mItemManger.closeAllItems();
+ }
+
+ @Override
+ public List getOpenItems() {
+ return mItemManger.getOpenItems();
+ }
+
+ @Override
+ public List getOpenLayouts() {
+ return mItemManger.getOpenLayouts();
+ }
+
+ @Override
+ public void removeShownLayouts(SwipeLayout layout) {
+ mItemManger.removeShownLayouts(layout);
+ }
+
+ @Override
+ public boolean isOpen(int position) {
+ return mItemManger.isOpen(position);
+ }
+
+ @Override
+ public Attributes.Mode getMode() {
+ return mItemManger.getMode();
+ }
+
+ @Override
+ public void setMode(Attributes.Mode mode) {
+ mItemManger.setMode(mode);
+ }
+
+}
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/RecyclerSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/RecyclerSwipeAdapter.java
index f6e9aed3..267deb19 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/RecyclerSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/RecyclerSwipeAdapter.java
@@ -1,8 +1,9 @@
package com.daimajia.swipe.adapters;
-import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
index 19b04ad2..633254c8 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
@@ -2,10 +2,11 @@
import android.content.Context;
import android.database.Cursor;
-import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.ViewGroup;
+import androidx.cursoradapter.widget.SimpleCursorAdapter;
+
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;