Skip to content

Commit 54e79e0

Browse files
author
Sergey Polohach
committed
Migrate library to AndroidX. Fix issue #30
1 parent 534be88 commit 54e79e0

File tree

50 files changed

+562
-338
lines changed

Some content is hidden

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

50 files changed

+562
-338
lines changed

CHANGELOG.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Version | Changes
1111
v.1.1.1 | <ul><li>Added ability to change scroll mode</li><li>Fixed overlay feature</li><li>Updated start position in Infinite scroll mode</li><li>Removed unused dependencies</li><li>Updated versions of dependencies</li><li>unused or old methods were marked as deprecated</li><li>Added auto resize selector logic for different size of items support</li><li>Removed start and end shadows</li></ul>
1212
v.1.1.2 | <ul><li>Added SDK v.15 support</li><ul>
1313
v.1.1.3 | <ul><li>Fixed crashes with empty adapter</li><li>Fixed crashes without adapter</li><ul>
14-
v.1.1.4 | <ul><li>Added loopbar orientation top and right </li><li>Update buildToolsVersion to 25.0.3</li></ul>
14+
v.1.1.4 | <ul><li>Added loopbar orientation top and right </li><li>BuildToolsVersion updated to 25.0.3</li></ul>
15+
v.1.1.5 | <ul><li>Added attribute and methods for list background changing</li><li>BuildToolsVersion updated to 27.0.2</li></ul>
16+
v.1.2.0 | <ul><li>[Fix issue #30](https://github.com/Cleveroad/LoopBar/issues/30)</li><li>Migrate library to AndroidX</li><li>BuildToolsVersion updated to 29.0.1</li></ul>
1517

1618
<br />

LoopBar-widget/build.gradle

+10-17
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ apply plugin: 'com.android.library'
22

33

44
android {
5-
compileSdkVersion 25
6-
buildToolsVersion "25.0.2"
5+
compileSdkVersion 29
6+
buildToolsVersion "29.0.1"
77

88
defaultConfig {
99
minSdkVersion 15
10-
targetSdkVersion 25
11-
versionCode 10
12-
versionName "1.1.4"
10+
targetSdkVersion 29
11+
versionCode 12
12+
versionName "1.2.0"
1313
}
1414
buildTypes {
1515
release {
@@ -30,19 +30,12 @@ android {
3030
resourcePrefix "enls_"
3131
}
3232

33-
3433
dependencies {
35-
final SUPPORT_LIB_VERSION = '25.1.1'
36-
37-
compile fileTree(include: ['*.jar'], dir: 'libs')
38-
//noinspection GradleCompatible
39-
compile "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION"
40-
//noinspection GradleCompatible
41-
compile "com.android.support:recyclerview-v7:$SUPPORT_LIB_VERSION"
42-
//noinspection GradleCompatible
43-
compile "com.android.support:support-annotations:$SUPPORT_LIB_VERSION"
44-
//noinspection GradleCompatible
45-
compile "com.android.support:cardview-v7:$SUPPORT_LIB_VERSION"
34+
implementation fileTree(include: ['*.jar'], dir: 'libs')
35+
// Support
36+
implementation supportDependencies.lifecycleExtension
37+
implementation supportDependencies.recyclerView
38+
implementation supportDependencies.appCompat
4639
}
4740

4841
apply from: './gradle-mvn-push.gradle'

LoopBar-widget/src/main/java/com/cleveroad/loopbar/adapter/BaseRecyclerViewHolder.java

+15-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.cleveroad.loopbar.adapter;
22

3-
import android.support.annotation.NonNull;
4-
import android.support.annotation.Nullable;
5-
import android.support.v7.widget.RecyclerView;
63
import android.view.View;
74

5+
import androidx.annotation.NonNull;
6+
import androidx.annotation.Nullable;
7+
import androidx.recyclerview.widget.RecyclerView;
8+
89
import com.cleveroad.loopbar.widget.OnItemClickListener;
910

11+
import java.lang.ref.WeakReference;
12+
1013
/**
11-
* Base realization of ViewHolder {@link android.support.v7.widget.RecyclerView.ViewHolder}
14+
* Base realization of ViewHolder {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}
1215
*
1316
* @param <T> Type of models for displaying in ViewHolder
1417
*/
@@ -19,7 +22,7 @@ public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder
1922
private static final String TAG_ITEM_VIEW = "itemView";
2023
private T item;
2124
@Nullable
22-
private OnItemClickListener mListener;
25+
private WeakReference<OnItemClickListener> mWeakRefListener;
2326

2427
public BaseRecyclerViewHolder(@NonNull View itemView) {
2528
super(itemView);
@@ -37,7 +40,7 @@ public void setClickable(boolean clickable) {
3740
@SuppressWarnings("unused")
3841
public void setListener(@Nullable OnItemClickListener listener) {
3942
setClickable(true);
40-
mListener = listener;
43+
mWeakRefListener = new WeakReference<>(listener);
4144
}
4245

4346
public T getItem() {
@@ -53,6 +56,7 @@ public final void bindItem(T item) {
5356
* Override this method with {@link #setClickable(boolean)} to receive click events on viewHolder item in child class
5457
*/
5558
public void onItemClicked(T item) {
59+
//do nothing
5660
}
5761

5862
/**
@@ -71,8 +75,11 @@ public void onClick(View v) {
7175
Object tag = v.getTag(KEY_VIEW_TAG);
7276
if (tag != null && tag.equals(TAG_ITEM_VIEW) && getAdapterPosition() != -1 && isClickAllowed()) {
7377
onItemClicked(getItem());
74-
if (mListener != null) {
75-
mListener.onItemClicked(getAdapterPosition());
78+
if (mWeakRefListener != null) {
79+
OnItemClickListener listener = mWeakRefListener.get();
80+
if (listener != null) {
81+
listener.onItemClicked(getAdapterPosition());
82+
}
7683
}
7784
}
7885
}

LoopBar-widget/src/main/java/com/cleveroad/loopbar/adapter/ILoopBarPagerAdapter.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.cleveroad.loopbar.adapter;
22

33
import android.graphics.drawable.Drawable;
4-
import android.support.annotation.NonNull;
4+
5+
import androidx.annotation.NonNull;
56

67
/**
7-
* Interface for ViewPager adapter {@link android.support.v4.view.PagerAdapter}
8+
* Interface for ViewPager adapter {@link androidx.viewpager.widget.PagerAdapter}
89
* Need to be implemented if you want to show images in LoopBar
910
*/
1011
public interface ILoopBarPagerAdapter {
@@ -13,6 +14,7 @@ public interface ILoopBarPagerAdapter {
1314
* Returns the title for page to show in LoopBar item
1415
*
1516
* @param position Page position
17+
*
1618
* @return instance of {@link CharSequence}
1719
*/
1820
@NonNull
@@ -22,6 +24,7 @@ public interface ILoopBarPagerAdapter {
2224
* Returns the drawable for page to show in LoopBar item
2325
*
2426
* @param position Page position
27+
*
2528
* @return instance of {@link Drawable}
2629
*/
2730
@NonNull

LoopBar-widget/src/main/java/com/cleveroad/loopbar/adapter/IOperationItem.java

-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@ public interface IOperationItem {
55
boolean isVisible();
66

77
void setVisible(boolean isVisible);
8-
98
}

LoopBar-widget/src/main/java/com/cleveroad/loopbar/adapter/SimpleCategoriesAdapter.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.cleveroad.loopbar.adapter;
22

3-
import android.support.annotation.NonNull;
4-
import android.support.v7.widget.RecyclerView;
53
import android.view.LayoutInflater;
64
import android.view.View;
75
import android.view.ViewGroup;
86
import android.widget.ImageView;
97
import android.widget.TextView;
108

9+
import androidx.annotation.NonNull;
10+
import androidx.recyclerview.widget.RecyclerView;
11+
1112
import com.cleveroad.loopbar.R;
1213

1314
import java.util.List;

LoopBar-widget/src/main/java/com/cleveroad/loopbar/adapter/SimpleCategoriesMenuAdapter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.cleveroad.loopbar.adapter;
22

3-
import android.support.annotation.NonNull;
43
import android.view.Menu;
54
import android.view.MenuItem;
65

6+
import androidx.annotation.NonNull;
7+
78
import com.cleveroad.loopbar.model.CategoryItem;
89

910
import java.util.ArrayList;

LoopBar-widget/src/main/java/com/cleveroad/loopbar/model/MockedItemsFactory.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.cleveroad.loopbar.model;
22

33
import android.content.Context;
4-
import android.support.v4.content.ContextCompat;
4+
5+
import androidx.core.content.ContextCompat;
56

67
import com.cleveroad.loopbar.R;
78
import com.cleveroad.loopbar.adapter.ICategoryItem;

LoopBar-widget/src/main/java/com/cleveroad/loopbar/widget/AbstractOrientationState.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ protected ISelectionGravityState getGravityState() {
2727
return mSelectionGravityState;
2828
}
2929

30-
//dispatch to gravity state
30+
// Dispatch to gravity state
3131
@Override
3232
public <T extends ViewGroup.MarginLayoutParams> T setSelectionMargin(int marginPx, T layoutParams) {
3333
return mSelectionGravityState.setSelectionMargin(marginPx, layoutParams);

LoopBar-widget/src/main/java/com/cleveroad/loopbar/widget/AbstractSpacesItemDecoration.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.cleveroad.loopbar.widget;
22

3-
import android.support.v7.widget.RecyclerView;
3+
4+
import androidx.recyclerview.widget.RecyclerView;
45

56
class AbstractSpacesItemDecoration extends RecyclerView.ItemDecoration {
67

LoopBar-widget/src/main/java/com/cleveroad/loopbar/widget/BaseRecyclerViewHolder.java

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package com.cleveroad.loopbar.widget;
22

3-
import android.support.annotation.NonNull;
4-
import android.support.annotation.Nullable;
5-
import android.support.v7.widget.RecyclerView;
63
import android.view.View;
74

5+
import androidx.annotation.NonNull;
6+
import androidx.annotation.Nullable;
7+
import androidx.recyclerview.widget.RecyclerView;
8+
9+
import java.lang.ref.WeakReference;
10+
811
abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder implements View.OnClickListener {
912

1013
@SuppressWarnings("WeakerAccess")
1114
protected static final int KEY_VIEW_TAG = -1;
1215
private static final String TAG_ITEM_VIEW = "itemView";
1316
private T mItem;
1417
@Nullable
15-
private OnItemClickListener mListener;
18+
private WeakReference<OnItemClickListener> mWeakRefListener;
1619
private int mCurrentPosition;
1720

1821
BaseRecyclerViewHolder(@NonNull View itemView) {
@@ -30,7 +33,7 @@ private void setClickable(boolean clickable) {
3033

3134
void setListener(@Nullable OnItemClickListener listener) {
3235
setClickable(true);
33-
mListener = listener;
36+
mWeakRefListener = new WeakReference<>(listener);
3437
}
3538

3639
public T getItem() {
@@ -43,17 +46,16 @@ final void bindItem(T item, int position) {
4346
onBindItem(item, position);
4447
}
4548

46-
private int getmCurrentPosition() {
49+
private int getCurrentPosition() {
4750
return mCurrentPosition;
4851
}
4952

5053
/**
5154
* Override this method with {@link #setClickable(boolean)} to receive click events on viewHolder mItem in child class
5255
*/
53-
5456
@SuppressWarnings("WeakerAccess")
5557
void onItemClicked(T item) {
56-
58+
// do nothing
5759
}
5860

5961
public boolean isClickAllowed() {
@@ -67,8 +69,11 @@ public void onClick(View v) {
6769
Object tag = v.getTag(KEY_VIEW_TAG);
6870
if (tag != null && tag.equals(TAG_ITEM_VIEW) && getAdapterPosition() != -1 && isClickAllowed()) {
6971
onItemClicked(getItem());
70-
if (mListener != null) {
71-
mListener.onItemClicked(getmCurrentPosition());
72+
if (mWeakRefListener != null) {
73+
OnItemClickListener listener = mWeakRefListener.get();
74+
if (listener != null) {
75+
listener.onItemClicked(getCurrentPosition());
76+
}
7277
}
7378
}
7479
}

LoopBar-widget/src/main/java/com/cleveroad/loopbar/widget/CategoriesAdapter.java

+14-30
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
package com.cleveroad.loopbar.widget;
22

33
import android.annotation.SuppressLint;
4-
import android.support.annotation.NonNull;
5-
import android.support.v7.widget.RecyclerView;
64
import android.view.LayoutInflater;
75
import android.view.View;
86
import android.view.ViewGroup;
97

8+
import androidx.annotation.NonNull;
9+
import androidx.recyclerview.widget.RecyclerView;
10+
1011
import com.cleveroad.loopbar.R;
1112
import com.cleveroad.loopbar.adapter.IOperationItem;
1213
import com.cleveroad.loopbar.adapter.OperationItem;
1314

15+
import java.lang.ref.WeakReference;
1416
import java.util.Collection;
1517
import java.util.HashMap;
16-
import java.util.LinkedList;
17-
import java.util.List;
18+
19+
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
1820

1921
class CategoriesAdapter extends RecyclerView.Adapter<BaseRecyclerViewHolder<IOperationItem>>
2022
implements OnItemClickListener {
@@ -28,8 +30,7 @@ class CategoriesAdapter extends RecyclerView.Adapter<BaseRecyclerViewHolder<IOpe
2830

2931
@SuppressLint("UseSparseArrays")
3032
private HashMap<Integer, IOperationItem> mWrappedItems = new HashMap<>();
31-
private OnItemClickListener mListener;
32-
private List<OnItemClickListener> mOuterItemClickListeners = new LinkedList<>();
33+
private WeakReference<OnItemClickListener> mListener;
3334
private boolean mIsIndeterminate = true;
3435

3536
CategoriesAdapter(RecyclerView.Adapter<? extends RecyclerView.ViewHolder> inputAdapter) {
@@ -39,27 +40,12 @@ class CategoriesAdapter extends RecyclerView.Adapter<BaseRecyclerViewHolder<IOpe
3940
}
4041
}
4142

42-
43-
void addOnItemClickListener(OnItemClickListener onItemClickListener) {
44-
mOuterItemClickListeners.add(onItemClickListener);
45-
}
46-
47-
void removeOnItemClickListener(OnItemClickListener onItemClickListener) {
48-
mOuterItemClickListeners.remove(onItemClickListener);
49-
}
50-
51-
private void notifyItemClicked(int position) {
52-
for (OnItemClickListener listener : mOuterItemClickListeners) {
53-
listener.onItemClicked(position);
54-
}
55-
}
56-
5743
Collection<IOperationItem> getWrappedItems() {
5844
return mWrappedItems.values();
5945
}
6046

6147
void setListener(OnItemClickListener listener) {
62-
mListener = listener;
48+
mListener = new WeakReference<>(listener);
6349
}
6450

6551
private View createEmptyView(ViewGroup parent) {
@@ -106,15 +92,14 @@ public BaseRecyclerViewHolder<IOperationItem> onCreateViewHolder(ViewGroup paren
10692
if (mOrientation == Orientation.ORIENTATION_VERTICAL_LEFT || mOrientation == Orientation.ORIENTATION_VERTICAL_RIGHT) {
10793
//if mOrientation vertical set layout params to MATCH_PARENT to center item in view
10894
ViewGroup.LayoutParams layoutParams = viewHolder.itemView.getLayoutParams();
109-
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
95+
layoutParams.width = MATCH_PARENT;
11096
viewHolder.itemView.requestLayout();
11197
} else {
11298
//if mOrientation vertical set layout params to MATCH_PARENT to center item in view
11399
ViewGroup.LayoutParams layoutParams = viewHolder.itemView.getLayoutParams();
114-
layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
100+
layoutParams.height = MATCH_PARENT;
115101
viewHolder.itemView.requestLayout();
116102
}
117-
118103
if (mListener != null) {
119104
categoriesHolder.setListener(this);
120105
}
@@ -124,8 +109,10 @@ public BaseRecyclerViewHolder<IOperationItem> onCreateViewHolder(ViewGroup paren
124109
@Override
125110
public void onItemClicked(int position) {
126111
int normalizedPosition = normalizePosition(position);
127-
mListener.onItemClicked(normalizedPosition);
128-
notifyItemClicked(normalizedPosition);
112+
OnItemClickListener listener = mListener.get();
113+
if (listener != null) {
114+
listener.onItemClicked(normalizedPosition);
115+
}
129116
}
130117

131118
@Override
@@ -159,7 +146,6 @@ static class EmptyHolder extends BaseRecyclerViewHolder<IOperationItem> {
159146
protected void onBindItem(IOperationItem item, int position) {
160147
//do nothing
161148
}
162-
163149
}
164150

165151
class CategoriesHolder extends BaseRecyclerViewHolder<IOperationItem> {
@@ -177,7 +163,6 @@ <T extends RecyclerView.ViewHolder> void bindItemWildcardHelper(RecyclerView.Ada
177163
adapter.onBindViewHolder(vh, normalizePosition(position));
178164
}
179165

180-
181166
@Override
182167
protected final void onBindItem(IOperationItem item, int position) {
183168
bindItemWildcardHelper(mInputAdapter, position);
@@ -188,6 +173,5 @@ protected final void onBindItem(IOperationItem item, int position) {
188173
public boolean isClickAllowed() {
189174
return getItem().isVisible();
190175
}
191-
192176
}
193177
}

0 commit comments

Comments
 (0)