diff --git a/build.gradle b/build.gradle index 6303ad5..1fcb2cc 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext.gradle_tools_version = '3.2.0' - ext.support_version = '28.0.0' + ext.support_version = '1.1.0' ext.glide_version = '4.7.1' repositories { diff --git a/gradle.properties b/gradle.properties index 320913e..b0571e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,4 +30,6 @@ POM_LICENCE_URL=http://opensource.org/licenses/MIT POM_LICENCE_DIST=repo POM_DEVELOPER_ID=cleveroad -POM_DEVELOPER_NAME=Cleveroad \ No newline at end of file +POM_DEVELOPER_NAME=Cleveroad +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index 5384276..72740d3 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -8,7 +8,7 @@ android { targetSdkVersion 28 versionCode 8 versionName "1.2.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -21,6 +21,6 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "com.android.support:appcompat-v7:$support_version" + implementation "androidx.appcompat:appcompat:$support_version" } //apply from: 'gradle-mvn-push.gradle' diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index 205d7c6..ff94558 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,9 +1,4 @@ - - - + + diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableAdapter.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableAdapter.java index e3d6e4a..71215ed 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableAdapter.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableAdapter.java @@ -1,7 +1,7 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; /** diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java index deb84d4..ce3d2e9 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableLayout.java @@ -10,16 +10,17 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.RequiresApi; -import android.support.v4.util.SparseArrayCompat; -import android.support.v4.view.ViewCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.collection.SparseArrayCompat; +import androidx.core.view.ViewCompat; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -820,6 +821,15 @@ private void recycleViewHolders(boolean isRecycleAll) { } removeKeys(headerKeysToRemove, mHeaderRowViewHolders); + + //top left header view holder + if (mLeftTopViewHolder != null) { + // recycle view holder + if (isRecycleAll) { + recycleViewHolder(mLeftTopViewHolder); + mLeftTopViewHolder = null; + } + } } @@ -867,31 +877,36 @@ private void addViewHolders(Rect filledArea) { int topRow = mManager.getRowByYWithShift(filledArea.top, mSettings.getCellMargin()); int bottomRow = mManager.getRowByYWithShift(filledArea.bottom, mSettings.getCellMargin()); - for (int i = topRow; i <= bottomRow; i++) { - for (int j = leftColumn; j <= rightColumn; j++) { - // item view holders - ViewHolder viewHolder = mViewHolders.get(i, j); - if (viewHolder == null && mAdapter != null) { - addViewHolder(i, j, ViewHolderType.ITEM); + int columnCount = mManager.getColumnCount(); + if (columnCount > 0) { + if (mManager.getRowCount() > 0) { + for (int i = topRow; i <= bottomRow; i++) { + for (int j = leftColumn; j <= rightColumn; j++) { + // item view holders + ViewHolder viewHolder = mViewHolders.get(i, j); + if (viewHolder == null && mAdapter != null) { + addViewHolder(i, j, ViewHolderType.ITEM); + } + } + + // row view headers holders + ViewHolder viewHolder = mHeaderRowViewHolders.get(i); + if (viewHolder == null && mAdapter != null) { + addViewHolder(i, isRTL() ? columnCount : 0, ViewHolderType.ROW_HEADER); + } else if (viewHolder != null && mAdapter != null) { + refreshHeaderRowViewHolder(viewHolder); + } } } - // row view headers holders - ViewHolder viewHolder = mHeaderRowViewHolders.get(i); - if (viewHolder == null && mAdapter != null) { - addViewHolder(i, isRTL() ? mManager.getColumnCount() : 0, ViewHolderType.ROW_HEADER); - } else if (viewHolder != null && mAdapter != null) { - refreshHeaderRowViewHolder(viewHolder); - } - } - - for (int i = leftColumn; i <= rightColumn; i++) { - // column view header holders - ViewHolder viewHolder = mHeaderColumnViewHolders.get(i); - if (viewHolder == null && mAdapter != null) { - addViewHolder(0, i, ViewHolderType.COLUMN_HEADER); - } else if (viewHolder != null && mAdapter != null) { - refreshHeaderColumnViewHolder(viewHolder); + for (int i = leftColumn; i <= rightColumn; i++) { + // column view header holders + ViewHolder viewHolder = mHeaderColumnViewHolders.get(i); + if (viewHolder == null && mAdapter != null) { + addViewHolder(0, i, ViewHolderType.COLUMN_HEADER); + } else if (viewHolder != null && mAdapter != null) { + refreshHeaderColumnViewHolder(viewHolder); + } } } @@ -1637,12 +1652,8 @@ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float ve @Override public void notifyDataSetChanged() { - recycleViewHolders(true); - mVisibleArea.set(mState.getScrollX(), - mState.getScrollY(), - mState.getScrollX() + mSettings.getLayoutWidth(), - mState.getScrollY() + mSettings.getLayoutHeight()); - addViewHolders(mVisibleArea); + initItems(); + notifyLayoutChanged(); } @Override diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableManager.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableManager.java index 138de99..cad8cc3 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableManager.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/AdaptiveTableManager.java @@ -54,6 +54,12 @@ void clear() { } void init(int rowCount, int columnCount) { + if (rowCount < 0) { + rowCount = 0; + } + if (columnCount < 0) { + columnCount = 0; + } // create objects mRowHeights = new int[rowCount]; mColumnWidths = new int[columnCount]; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/DataAdaptiveTableLayoutAdapter.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/DataAdaptiveTableLayoutAdapter.java index 201baec..ed36145 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/DataAdaptiveTableLayoutAdapter.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/DataAdaptiveTableLayoutAdapter.java @@ -1,7 +1,7 @@ package com.cleveroad.adaptivetablelayout; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; interface DataAdaptiveTableLayoutAdapter extends AdaptiveTableAdapter { /** diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/LayoutDirection.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/LayoutDirection.java index b4c8a3a..51c6843 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/LayoutDirection.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/LayoutDirection.java @@ -1,6 +1,6 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.IntDef; +import androidx.annotation.IntDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapter.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapter.java index b663302..5035411 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapter.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapter.java @@ -1,7 +1,7 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.ArrayList; import java.util.List; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapterImpl.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapterImpl.java index 5b35f37..262c6b2 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapterImpl.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/LinkedAdaptiveTableAdapterImpl.java @@ -2,8 +2,8 @@ import android.annotation.SuppressLint; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ViewGroup; import java.util.HashMap; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/Recycler.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/Recycler.java index e551978..1f18b4d 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/Recycler.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/Recycler.java @@ -1,7 +1,7 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.SparseArray; import java.util.ArrayDeque; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollHelper.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollHelper.java index dd06b9f..4e3d99e 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollHelper.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollHelper.java @@ -1,8 +1,8 @@ package com.cleveroad.adaptivetablelayout; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v4.view.GestureDetectorCompat; +import androidx.annotation.Nullable; +import androidx.core.view.GestureDetectorCompat; import android.view.GestureDetector; import android.view.MotionEvent; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollType.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollType.java index e56233c..16dacc7 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollType.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ScrollType.java @@ -1,6 +1,6 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.IntDef; +import androidx.annotation.IntDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ShadowHelper.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ShadowHelper.java index 9e9bd7e..0c50deb 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ShadowHelper.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ShadowHelper.java @@ -1,7 +1,7 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/SparseMatrix.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/SparseMatrix.java index 365a7f1..998a99d 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/SparseMatrix.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/SparseMatrix.java @@ -1,8 +1,8 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.util.SparseArrayCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.collection.SparseArrayCompat; import java.util.Collection; import java.util.LinkedList; diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolder.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolder.java index 9585771..6ff456a 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolder.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolder.java @@ -1,12 +1,12 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; /** * A {@link ViewHolder} describes an item view and metadata about its place within the {@link AdaptiveTableLayout}. */ -interface ViewHolder { +public interface ViewHolder { /** * @return item represents the item of the {@link AdaptiveTableLayout} */ diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderImpl.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderImpl.java index 9b7c477..54c1b79 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderImpl.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderImpl.java @@ -1,6 +1,6 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; /** diff --git a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderType.java b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderType.java index 7e1b0c7..841e8cc 100644 --- a/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderType.java +++ b/library/src/main/java/com/cleveroad/adaptivetablelayout/ViewHolderType.java @@ -1,6 +1,6 @@ package com.cleveroad.adaptivetablelayout; -import android.support.annotation.IntDef; +import androidx.annotation.IntDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml deleted file mode 100644 index 52abb56..0000000 --- a/library/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - AdaptiveTableLayout - diff --git a/sample/build.gradle b/sample/build.gradle index ea63a7e..656545b 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,14 +1,14 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 28 + compileSdkVersion 29 defaultConfig { applicationId "com.cleveroad.tablelayout" minSdkVersion 16 - targetSdkVersion 28 + targetSdkVersion 29 versionCode 8 versionName "1.2.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { @@ -20,10 +20,10 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "com.android.support:appcompat-v7:$support_version" - implementation "com.android.support:cardview-v7:$support_version" - implementation "com.android.support:support-v4:$support_version" - implementation "com.android.support:design:$support_version" + implementation "androidx.appcompat:appcompat:$support_version" + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.google.android.material:material:1.0.0' // compile 'com.facebook.android:facebook-android-sdk:4.24.0' //Glide diff --git a/sample/src/main/java/com/cleveroad/sample/adapter/SampleLinkedTableAdapter.java b/sample/src/main/java/com/cleveroad/sample/adapter/SampleLinkedTableAdapter.java index c07c097..d2ec891 100644 --- a/sample/src/main/java/com/cleveroad/sample/adapter/SampleLinkedTableAdapter.java +++ b/sample/src/main/java/com/cleveroad/sample/adapter/SampleLinkedTableAdapter.java @@ -4,9 +4,9 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.graphics.ColorUtils; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/sample/src/main/java/com/cleveroad/sample/datasource/CsvFileDataSourceImpl.java b/sample/src/main/java/com/cleveroad/sample/datasource/CsvFileDataSourceImpl.java index bc14929..910f630 100644 --- a/sample/src/main/java/com/cleveroad/sample/datasource/CsvFileDataSourceImpl.java +++ b/sample/src/main/java/com/cleveroad/sample/datasource/CsvFileDataSourceImpl.java @@ -4,9 +4,9 @@ import android.content.Context; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.LoaderManager; -import android.support.v4.content.Loader; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; diff --git a/sample/src/main/java/com/cleveroad/sample/datasource/UpdateCsvFileLoader.java b/sample/src/main/java/com/cleveroad/sample/datasource/UpdateCsvFileLoader.java index 5d19d35..59ae51f 100644 --- a/sample/src/main/java/com/cleveroad/sample/datasource/UpdateCsvFileLoader.java +++ b/sample/src/main/java/com/cleveroad/sample/datasource/UpdateCsvFileLoader.java @@ -1,10 +1,10 @@ package com.cleveroad.sample.datasource; import android.content.Context; -import android.os.Environment; -import android.support.v4.content.AsyncTaskLoader; import android.util.Log; +import androidx.loader.content.AsyncTaskLoader; + import com.cleveroad.sample.utils.ClosableUtil; import com.cleveroad.sample.utils.StringUtils; @@ -104,6 +104,7 @@ private String saveChange() { final String originalFilePath = mCsvFileDataSource.getCsvFileUri().getEncodedPath(); File originalFile = new File(originalFilePath); + File originalFileDir = originalFile.getParentFile(); final String originalFileName = originalFile.getName(); final String newFilePath; @@ -128,7 +129,7 @@ private String saveChange() { newFileName = originalFileName.replace(CSV, TEMP_CSV); } - changedFile = new File(Environment.getExternalStorageDirectory(), newFileName); + changedFile = new File(originalFileDir, newFileName); try { changedFile.createNewFile(); } catch (IOException e1) { @@ -200,6 +201,7 @@ private String applyChanges() { final String originalFilePath = mCsvFileDataSource.getCsvFileUri().getEncodedPath(); File originalFile = new File(originalFilePath); + File originalFileDir = originalFile.getParentFile(); final String originalFileName = originalFile.getName(); final String newFilePath; @@ -224,7 +226,7 @@ private String applyChanges() { } else { newFileName = originalFileName.replace(CSV, TEMP_CSV); } - changedFile = new File(Environment.getExternalStorageDirectory(), newFileName); + changedFile = new File(originalFileDir, newFileName); try { changedFile.createNewFile(); } catch (IOException e1) { @@ -345,9 +347,9 @@ private String deleteRow(File changedFile) { writer.write(NEW_LINE); } else { // include an empty line if you deleted the last line - if (row != null && mCsvFileDataSource.getRowsCount() == 2){ + if (row != null && mCsvFileDataSource.getRowsCount() == 2) { StringBuilder emptyRow = new StringBuilder(); - for(int j = 0; j < row.size() - 1; j++){ + for (int j = 0; j < row.size() - 1; j++) { emptyRow.append(SEPARATOR); } writer.write(emptyRow.toString()); diff --git a/sample/src/main/java/com/cleveroad/sample/provider/DocumentsProvider.java b/sample/src/main/java/com/cleveroad/sample/provider/DocumentsProvider.java index 7f72c12..be61103 100644 --- a/sample/src/main/java/com/cleveroad/sample/provider/DocumentsProvider.java +++ b/sample/src/main/java/com/cleveroad/sample/provider/DocumentsProvider.java @@ -10,8 +10,8 @@ import android.os.StrictMode; import android.provider.DocumentsContract; import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.cleveroad.sample.SampleApplication; diff --git a/sample/src/main/java/com/cleveroad/sample/ui/CsvPickerFragment.java b/sample/src/main/java/com/cleveroad/sample/ui/CsvPickerFragment.java index 71023f3..96bb1a4 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/CsvPickerFragment.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/CsvPickerFragment.java @@ -8,10 +8,6 @@ import android.graphics.Color; import android.os.Build; import android.os.Bundle; -import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; @@ -23,6 +19,10 @@ import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + import com.cleveroad.sample.R; import com.cleveroad.sample.provider.DocumentsProvider; import com.cleveroad.sample.utils.FileUtils; @@ -31,7 +31,6 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Objects; import static android.content.Intent.EXTRA_MIME_TYPES; @@ -71,7 +70,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat SpannableString ss = new SpannableString(getString(R.string.pick_csv_or_demo_file)); ClickableSpan clickableSpan = new ClickableSpan() { @Override - public void onClick(View textView) { + public void onClick(@NonNull View textView) { if (PermissionHelper.checkOrRequest(CsvPickerFragment.this, REQUEST_CODE_PERMISSION_READ_EXTERNAL_STORAGE_DEMO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { createDemoFile(); @@ -79,7 +78,7 @@ public void onClick(View textView) { } @Override - public void updateDrawState(TextPaint ds) { + public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); } @@ -148,10 +147,7 @@ private void createDemoFile() { File file = createDemoTempFile(); try { if (!file.exists() && file.createNewFile()) { - InputStream inputStream = null; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { - inputStream = Objects.requireNonNull(getContext()).getAssets().open("fifa100.csv"); - } + InputStream inputStream = requireContext().getAssets().open("fifa100.csv"); FileUtils.copy(inputStream, file); } } catch (IOException e) { @@ -171,7 +167,7 @@ private void createDemoFile() { public File createDemoTempFile() { String tempFileName = "DEMO_table_layout_application.csv"; - return new File(Environment.getExternalStorageDirectory(), tempFileName); + return new File(requireContext().getFilesDir(), tempFileName); } interface OnCsvFileSelectedListener { diff --git a/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java b/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java index d3baa52..81d3a20 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/SampleActivity.java @@ -1,7 +1,7 @@ package com.cleveroad.sample.ui; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.widget.Toast; import com.cleveroad.sample.R; diff --git a/sample/src/main/java/com/cleveroad/sample/ui/TableLayoutFragment.java b/sample/src/main/java/com/cleveroad/sample/ui/TableLayoutFragment.java index e052f1b..18f5c8e 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/TableLayoutFragment.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/TableLayoutFragment.java @@ -6,11 +6,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.Snackbar; -import android.support.v4.app.Fragment; -import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; @@ -19,6 +14,12 @@ import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; + import com.cleveroad.adaptivetablelayout.AdaptiveTableLayout; import com.cleveroad.adaptivetablelayout.LinkedAdaptiveTableAdapter; import com.cleveroad.adaptivetablelayout.OnItemClickListener; @@ -33,8 +34,7 @@ import com.cleveroad.sample.ui.dialogs.EditItemDialog; import com.cleveroad.sample.ui.dialogs.SettingsDialog; import com.cleveroad.sample.utils.PermissionHelper; - -import java.util.Objects; +import com.google.android.material.snackbar.Snackbar; import static com.cleveroad.sample.datasource.Constants.ADD_COLUMN; import static com.cleveroad.sample.datasource.Constants.ADD_ROW; @@ -87,9 +87,7 @@ public static TableLayoutFragment newInstance(@NonNull String filename) { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - mCsvFile = Uri.parse(Objects.requireNonNull(getArguments()).getString(EXTRA_CSV_FILE)); - } + mCsvFile = Uri.parse(requireArguments().getString(EXTRA_CSV_FILE)); mCsvFileDataSource = new CsvFileDataSourceImpl(getContext(), mCsvFile); } @@ -106,9 +104,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - Objects.requireNonNull(getActivity()).onBackPressed(); - } + requireActivity().onBackPressed(); } }); toolbar.inflateMenu(R.menu.table_layout); @@ -140,7 +136,7 @@ public boolean onMenuItemClick(MenuItem item) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mSnackbar = Snackbar.make(view, R.string.changes_saved, Snackbar.LENGTH_INDEFINITE); - TextView tv = mSnackbar.getView().findViewById(android.support.design.R.id.snackbar_text); + TextView tv = mSnackbar.getView().findViewById(R.id.snackbar_text); tv.setMaxLines(3); mSnackbar.setAction("Close", new View.OnClickListener() { @Override @@ -151,39 +147,35 @@ public void onClick(View v) { } private void applyChanges() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (PermissionHelper.checkOrRequest( - Objects.requireNonNull(getActivity()), - REQUEST_EXTERNAL_STORAGE, - PERMISSIONS_STORAGE)) { - showProgress(); - mCsvFileDataSource.applyChanges( - getLoaderManager(), - mTableLayout.getLinkedAdapterRowsModifications(), - mTableLayout.getLinkedAdapterColumnsModifications(), - mTableLayout.isSolidRowHeader(), - TableLayoutFragment.this); - } + if (PermissionHelper.checkOrRequest( + requireActivity(), + REQUEST_EXTERNAL_STORAGE, + PERMISSIONS_STORAGE)) { + showProgress(); + mCsvFileDataSource.applyChanges( + LoaderManager.getInstance(this), + mTableLayout.getLinkedAdapterRowsModifications(), + mTableLayout.getLinkedAdapterColumnsModifications(), + mTableLayout.isSolidRowHeader(), + TableLayoutFragment.this); } } private void applyChanges(int actionChangeData, int position, boolean beforeOrAfter) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (PermissionHelper.checkOrRequest( - Objects.requireNonNull(getActivity()), - REQUEST_EXTERNAL_STORAGE, - PERMISSIONS_STORAGE)) { - showProgress(); - mCsvFileDataSource.applyChanges( - getLoaderManager(), - mTableLayout.getLinkedAdapterRowsModifications(), - mTableLayout.getLinkedAdapterColumnsModifications(), - mTableLayout.isSolidRowHeader(), - actionChangeData, - position, - beforeOrAfter, - TableLayoutFragment.this); - } + if (PermissionHelper.checkOrRequest( + requireActivity(), + REQUEST_EXTERNAL_STORAGE, + PERMISSIONS_STORAGE)) { + showProgress(); + mCsvFileDataSource.applyChanges( + LoaderManager.getInstance(this), + mTableLayout.getLinkedAdapterRowsModifications(), + mTableLayout.getLinkedAdapterColumnsModifications(), + mTableLayout.isSolidRowHeader(), + actionChangeData, + position, + beforeOrAfter, + TableLayoutFragment.this); } } diff --git a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddColumnDialog.java b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddColumnDialog.java index 728a72d..e506391 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddColumnDialog.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddColumnDialog.java @@ -4,10 +4,10 @@ import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddRowDialog.java b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddRowDialog.java index 189da60..038d716 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddRowDialog.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/AddRowDialog.java @@ -4,9 +4,9 @@ import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/DeleteDialog.java b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/DeleteDialog.java index 940264f..d81b867 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/DeleteDialog.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/DeleteDialog.java @@ -4,9 +4,9 @@ import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/EditItemDialog.java b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/EditItemDialog.java index 84161f4..f36083c 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/EditItemDialog.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/EditItemDialog.java @@ -3,14 +3,7 @@ import android.app.Activity; import android.content.Intent; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputEditText; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; @@ -18,9 +11,14 @@ import android.view.Window; import android.widget.TextView; -import com.cleveroad.sample.R; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; -import java.util.Objects; +import com.cleveroad.sample.R; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; import static com.cleveroad.sample.datasource.Constants.EXTRA_COLUMN_NUMBER; import static com.cleveroad.sample.datasource.Constants.EXTRA_ROW_NUMBER; @@ -92,12 +90,10 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c @Override public void onResume() { super.onResume(); - Window window = getDialog().getWindow(); + Window window = requireDialog().getWindow(); if (window != null) { DisplayMetrics dm = new DisplayMetrics(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay().getMetrics(dm); - } + requireActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); int height = dm.heightPixels; int width = dm.widthPixels; window.setLayout(width, height); diff --git a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/SettingsDialog.java b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/SettingsDialog.java index 9dd0bc2..cb16a4a 100644 --- a/sample/src/main/java/com/cleveroad/sample/ui/dialogs/SettingsDialog.java +++ b/sample/src/main/java/com/cleveroad/sample/ui/dialogs/SettingsDialog.java @@ -3,13 +3,7 @@ import android.app.Activity; import android.content.Intent; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v7.widget.SwitchCompat; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; @@ -17,9 +11,13 @@ import android.view.Window; import android.widget.CompoundButton; -import com.cleveroad.sample.R; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.SwitchCompat; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; -import java.util.Objects; +import com.cleveroad.sample.R; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_SETTINGS; @@ -142,12 +140,10 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { @Override public void onResume() { super.onResume(); - Window window = getDialog().getWindow(); + Window window = requireDialog().getWindow(); if (window != null) { DisplayMetrics dm = new DisplayMetrics(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay().getMetrics(dm); - } + requireActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); int height = dm.heightPixels; int width = dm.widthPixels; window.setLayout(width, height); diff --git a/sample/src/main/java/com/cleveroad/sample/utils/PermissionHelper.java b/sample/src/main/java/com/cleveroad/sample/utils/PermissionHelper.java index 093803d..fc187e2 100644 --- a/sample/src/main/java/com/cleveroad/sample/utils/PermissionHelper.java +++ b/sample/src/main/java/com/cleveroad/sample/utils/PermissionHelper.java @@ -3,10 +3,10 @@ import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.core.content.ContextCompat; public class PermissionHelper { private PermissionHelper() { diff --git a/sample/src/main/res/layout/dialog_add_column.xml b/sample/src/main/res/layout/dialog_add_column.xml index 136119f..031c46d 100644 --- a/sample/src/main/res/layout/dialog_add_column.xml +++ b/sample/src/main/res/layout/dialog_add_column.xml @@ -1,5 +1,5 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/dialog_add_row.xml b/sample/src/main/res/layout/dialog_add_row.xml index d582066..d7661f2 100644 --- a/sample/src/main/res/layout/dialog_add_row.xml +++ b/sample/src/main/res/layout/dialog_add_row.xml @@ -1,5 +1,5 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/dialog_delete.xml b/sample/src/main/res/layout/dialog_delete.xml index 8b029e0..5366175 100644 --- a/sample/src/main/res/layout/dialog_delete.xml +++ b/sample/src/main/res/layout/dialog_delete.xml @@ -1,5 +1,5 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/dialog_edit_item.xml b/sample/src/main/res/layout/dialog_edit_item.xml index 61b3b70..723fae9 100644 --- a/sample/src/main/res/layout/dialog_edit_item.xml +++ b/sample/src/main/res/layout/dialog_edit_item.xml @@ -1,5 +1,5 @@ - - - - + - - - + diff --git a/sample/src/main/res/layout/dialog_edit_row.xml b/sample/src/main/res/layout/dialog_edit_row.xml index b16f0db..169457d 100644 --- a/sample/src/main/res/layout/dialog_edit_row.xml +++ b/sample/src/main/res/layout/dialog_edit_row.xml @@ -1,5 +1,5 @@ - - - + - - - + diff --git a/sample/src/main/res/layout/dialog_settings.xml b/sample/src/main/res/layout/dialog_settings.xml index e91699b..261c53a 100644 --- a/sample/src/main/res/layout/dialog_settings.xml +++ b/sample/src/main/res/layout/dialog_settings.xml @@ -1,5 +1,5 @@ - - - - - - - - + diff --git a/sample/src/main/res/layout/fragment_csv_picker.xml b/sample/src/main/res/layout/fragment_csv_picker.xml index 79cbe84..675b880 100644 --- a/sample/src/main/res/layout/fragment_csv_picker.xml +++ b/sample/src/main/res/layout/fragment_csv_picker.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="@color/medium_jungle_green"> - - - - - +