From 49c5c3952cef2d12d69b76d5a98958b2fd6c3371 Mon Sep 17 00:00:00 2001 From: premhalani Date: Fri, 14 Dec 2018 18:02:33 -0800 Subject: [PATCH 1/3] Fix null pointer exception by adding `headerLayout` --- .../main/res/layout-sw600dp/filestack__activity_filestack.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/filestack/src/main/res/layout-sw600dp/filestack__activity_filestack.xml b/filestack/src/main/res/layout-sw600dp/filestack__activity_filestack.xml index 28a16a6b..5c9e3390 100644 --- a/filestack/src/main/res/layout-sw600dp/filestack__activity_filestack.xml +++ b/filestack/src/main/res/layout-sw600dp/filestack__activity_filestack.xml @@ -32,6 +32,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:fitsSystemWindows="false" + app:headerLayout="@layout/filestack__nav_header_filestack" app:elevation="0dp"/> Date: Fri, 14 Dec 2018 18:13:16 -0800 Subject: [PATCH 2/3] Use text instead of icon to make it more understandable to users --- filestack/src/main/res/menu/filestack__menu.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/filestack/src/main/res/menu/filestack__menu.xml b/filestack/src/main/res/menu/filestack__menu.xml index bebda94f..9ddc0241 100644 --- a/filestack/src/main/res/menu/filestack__menu.xml +++ b/filestack/src/main/res/menu/filestack__menu.xml @@ -4,9 +4,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> Date: Fri, 14 Dec 2018 18:14:00 -0800 Subject: [PATCH 3/3] Show list of files that user selected from local storage --- .../android/internal/LocalFilesAdapter.java | 47 +++++++++++++++++++ .../android/internal/LocalFilesFragment.java | 23 ++++++++- .../filestack__ic_file_upload_blue.xml | 7 +++ .../filestack__fragment_local_files.xml | 10 +++- .../filestack__local_files_list_item.xml | 23 +++++++++ 5 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 filestack/src/main/java/com/filestack/android/internal/LocalFilesAdapter.java create mode 100644 filestack/src/main/res/drawable/filestack__ic_file_upload_blue.xml create mode 100644 filestack/src/main/res/layout/filestack__local_files_list_item.xml diff --git a/filestack/src/main/java/com/filestack/android/internal/LocalFilesAdapter.java b/filestack/src/main/java/com/filestack/android/internal/LocalFilesAdapter.java new file mode 100644 index 00000000..03f7d18b --- /dev/null +++ b/filestack/src/main/java/com/filestack/android/internal/LocalFilesAdapter.java @@ -0,0 +1,47 @@ +package com.filestack.android.internal; + +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.filestack.android.R; + +import java.util.ArrayList; + +public class LocalFilesAdapter extends RecyclerView.Adapter { + private ArrayList fileNames = new ArrayList<>(); + + @NonNull + @Override + public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.filestack__local_files_list_item, parent, false); + return new CustomViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull CustomViewHolder holder, int position) { + holder.text.setText(fileNames.get(position)); + } + + @Override + public int getItemCount() { + return fileNames.size(); + } + + void updateFileNames(ArrayList fileNames) { + this.fileNames = fileNames; + notifyDataSetChanged(); + } + + public static class CustomViewHolder extends RecyclerView.ViewHolder { + protected TextView text; + + CustomViewHolder(View itemView) { + super(itemView); + text = itemView.findViewById(R.id.text_id); + } + } +} diff --git a/filestack/src/main/java/com/filestack/android/internal/LocalFilesFragment.java b/filestack/src/main/java/com/filestack/android/internal/LocalFilesFragment.java index 48585b18..3e84ad7b 100644 --- a/filestack/src/main/java/com/filestack/android/internal/LocalFilesFragment.java +++ b/filestack/src/main/java/com/filestack/android/internal/LocalFilesFragment.java @@ -13,6 +13,9 @@ import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.support.v4.widget.ImageViewCompat; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; @@ -39,6 +42,8 @@ public class LocalFilesFragment extends Fragment implements View.OnClickListener private static final String ARG_ALLOW_MULTIPLE_FILES = "multipleFiles"; private static final int READ_REQUEST_CODE = RESULT_FIRST_USER; private static final String ARG_THEME = "theme"; + private LocalFilesAdapter adapter = new LocalFilesAdapter(); + private ImageView uploadLocalFilesImageView; public static Fragment newInstance(boolean allowMultipleFiles, Theme theme) { Fragment fragment = new LocalFilesFragment(); @@ -58,7 +63,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle st Theme theme = getArguments().getParcelable(ARG_THEME); ViewCompat.setBackgroundTintList(openGalleryButton, ColorStateList.valueOf(theme.getAccentColor())); openGalleryButton.setTextColor(theme.getBackgroundColor()); - ImageViewCompat.setImageTintList((ImageView) view.findViewById(R.id.icon), ColorStateList.valueOf(theme.getTextColor())); + uploadLocalFilesImageView = view.findViewById(R.id.icon); + ImageViewCompat.setImageTintList((uploadLocalFilesImageView), ColorStateList.valueOf(theme.getTextColor())); + RecyclerView filesListView = view.findViewById(R.id.gallery_list); + filesListView.setLayoutManager(new LinearLayoutManager(getContext())); + filesListView.setItemAnimator(new DefaultItemAnimator()); + filesListView.setAdapter(adapter); return view; } @@ -111,9 +121,20 @@ public void onActivityResult(int requestCode, int resultCode, Intent resultData) uris.add(resultData.getData()); } + ArrayList fileNames = new ArrayList<>(); for (Uri uri : uris) { Selection selection = processUri(uri); Util.getSelectionSaver().toggleItem(selection); + if (selection != null) { + fileNames.add(selection.getName()); + } + } + + if (fileNames.size() > 0) { + adapter.updateFileNames(fileNames); + uploadLocalFilesImageView.setVisibility(View.GONE); + } else { + uploadLocalFilesImageView.setVisibility(View.VISIBLE); } } } diff --git a/filestack/src/main/res/drawable/filestack__ic_file_upload_blue.xml b/filestack/src/main/res/drawable/filestack__ic_file_upload_blue.xml new file mode 100644 index 00000000..4ebd46d2 --- /dev/null +++ b/filestack/src/main/res/drawable/filestack__ic_file_upload_blue.xml @@ -0,0 +1,7 @@ + + + diff --git a/filestack/src/main/res/layout/filestack__fragment_local_files.xml b/filestack/src/main/res/layout/filestack__fragment_local_files.xml index 9e7ee516..d05984d5 100644 --- a/filestack/src/main/res/layout/filestack__fragment_local_files.xml +++ b/filestack/src/main/res/layout/filestack__fragment_local_files.xml @@ -2,7 +2,8 @@ @@ -27,4 +28,11 @@ android:layout_marginStart="8dp" android:text="@string/filestack__local_files_select" /> + + diff --git a/filestack/src/main/res/layout/filestack__local_files_list_item.xml b/filestack/src/main/res/layout/filestack__local_files_list_item.xml new file mode 100644 index 00000000..218acc73 --- /dev/null +++ b/filestack/src/main/res/layout/filestack__local_files_list_item.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file