diff --git a/app/build.gradle b/app/build.gradle index 6d6317e..ab4d008 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "23.0.2" defaultConfig { - applicationId "com.csc.lesson5" + applicationId "com.csc.fedorov.file_manager" minSdkVersion 15 targetSdkVersion 23 versionCode 1 @@ -21,4 +21,5 @@ android { dependencies { compile 'com.android.support:appcompat-v7:23.2.1' + compile 'com.android.support:recyclerview-v7:+' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6296c85..3615f17 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ + package="com.csc.fedorov.file_manager"> + + + - + diff --git a/app/src/main/java/com/csc/fedorov/file_manager/FilesAdapter.java b/app/src/main/java/com/csc/fedorov/file_manager/FilesAdapter.java new file mode 100644 index 0000000..cb72b68 --- /dev/null +++ b/app/src/main/java/com/csc/fedorov/file_manager/FilesAdapter.java @@ -0,0 +1,104 @@ +package com.csc.fedorov.file_manager; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import java.io.File; +import java.util.List; + +/** + * Created by roman on 28.03.2016. + */ +public class FilesAdapter extends RecyclerView.Adapter { + public List mFiles; + private Drawable fileIcon; + private Drawable folderIcon; + public Context context; + + private static OnItemClickListener clickListener; + private static OnItemLongClickListener longClickListener; + + + public interface OnItemClickListener { + void onItemClick(View itemView, int position); + } + + public interface OnItemLongClickListener { + void onItemLongClick(View itemView, int position); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.clickListener = listener; + } + + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + this.longClickListener = listener; + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + public TextView textView; + public ImageView imageView; + + public ViewHolder(final View itemView) { + super(itemView); + textView = (TextView) itemView.findViewById(R.id.file_item_name); + imageView = (ImageView) itemView.findViewById(R.id.file_item_image); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (clickListener != null) + clickListener.onItemClick(itemView, getLayoutPosition()); + } + }); + + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (longClickListener != null) { + longClickListener.onItemLongClick(itemView, getLayoutPosition()); + } + return true; + } + }); + } + } + + public FilesAdapter(List myDataset) { + mFiles = myDataset; + } + + // Create new views (invoked by the layout manager) + @Override + public FilesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + context = parent.getContext(); + View fileView = LayoutInflater.from(context).inflate(R.layout.file_item, parent, false); + folderIcon = ContextCompat.getDrawable(context, R.drawable.folder_icon_512x512); + fileIcon = ContextCompat.getDrawable(context, R.drawable.file_icon); + + return new ViewHolder(fileView); + } + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.textView.setText(mFiles.get(position).getName()); + if (mFiles.get(position).isDirectory()) { + holder.imageView.setImageDrawable(folderIcon); + } else { + holder.imageView.setImageDrawable(fileIcon); + } + } + + @Override + public int getItemCount() { + return mFiles.size(); + } +} diff --git a/app/src/main/java/com/csc/fedorov/file_manager/MainActivity.java b/app/src/main/java/com/csc/fedorov/file_manager/MainActivity.java new file mode 100644 index 0000000..0aaa517 --- /dev/null +++ b/app/src/main/java/com/csc/fedorov/file_manager/MainActivity.java @@ -0,0 +1,83 @@ +package com.csc.fedorov.file_manager; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.os.Environment; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.Toast; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.jar.Manifest; + +public class MainActivity extends AppCompatActivity { + private RecyclerView recyclerView; + private FilesAdapter adapter; + private RecyclerView.LayoutManager layoutManager; + private File currentFile; + private final ArrayList filesList = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main_activity); + + currentFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); + + recyclerView = (RecyclerView) findViewById(R.id.files_recycler_view); + final File[] filesArray = currentFile.listFiles(); + Collections.addAll(filesList, filesArray); + adapter = new FilesAdapter(filesList); + recyclerView.setAdapter(adapter); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + adapter.setOnItemClickListener(new FilesAdapter.OnItemClickListener() { + @Override + public void onItemClick(View itemView, int position) { + File clickedFile = filesList.get(position); + if (clickedFile.isDirectory()) { + File directoryToOpen = clickedFile.getAbsoluteFile(); + ArrayList insideDirectoryList = new ArrayList<>(); + Collections.addAll(insideDirectoryList, directoryToOpen.listFiles()); + filesList.clear(); + filesList.addAll(insideDirectoryList); + adapter.notifyDataSetChanged(); + } + } + }); + adapter.setOnItemLongClickListener(new FilesAdapter.OnItemLongClickListener() { + @Override + public void onItemLongClick(View itemView, final int position) { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setTitle(R.string.choose_action).setItems(R.array.actions, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (which == 2) { + if (currentFile.delete()) { + Toast.makeText(MainActivity.this, R.string.delete_ok, Toast.LENGTH_LONG).show(); + adapter.notifyItemRemoved(position); + } else { + Toast.makeText(MainActivity.this, R.string.delete_not_ok, Toast.LENGTH_LONG).show(); + } + } + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + } + }); + } + + @Override + public void onBackPressed() { + File parentFile = currentFile.getParentFile(); + ArrayList parentDirectoryList = new ArrayList<>(); + Collections.addAll(parentDirectoryList, parentFile.listFiles()); + filesList.clear(); + filesList.addAll(parentDirectoryList); + adapter.notifyDataSetChanged(); + } +} diff --git a/app/src/main/java/com/csc/lesson5/MainActivity.java b/app/src/main/java/com/csc/lesson5/MainActivity.java deleted file mode 100644 index 613d372..0000000 --- a/app/src/main/java/com/csc/lesson5/MainActivity.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.csc.lesson5; - -import android.support.v7.app.AppCompatActivity; -import android.os.Bundle; - -public class MainActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } -} diff --git a/app/src/main/res/drawable-hdpi/file_icon.9.png b/app/src/main/res/drawable-hdpi/file_icon.9.png new file mode 100644 index 0000000..551e763 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/file_icon.9.png differ diff --git a/app/src/main/res/drawable-hdpi/folder_icon_512x512.9.png b/app/src/main/res/drawable-hdpi/folder_icon_512x512.9.png new file mode 100644 index 0000000..03969d6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/folder_icon_512x512.9.png differ diff --git a/app/src/main/res/drawable-mdpi/file_icon.9.png b/app/src/main/res/drawable-mdpi/file_icon.9.png new file mode 100644 index 0000000..32025ad Binary files /dev/null and b/app/src/main/res/drawable-mdpi/file_icon.9.png differ diff --git a/app/src/main/res/drawable-mdpi/folder_icon_512x512.9.png b/app/src/main/res/drawable-mdpi/folder_icon_512x512.9.png new file mode 100644 index 0000000..24fee72 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/folder_icon_512x512.9.png differ diff --git a/app/src/main/res/drawable-xhdpi/file_icon.9.png b/app/src/main/res/drawable-xhdpi/file_icon.9.png new file mode 100644 index 0000000..93b6687 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/file_icon.9.png differ diff --git a/app/src/main/res/drawable-xhdpi/folder_icon_512x512.9.png b/app/src/main/res/drawable-xhdpi/folder_icon_512x512.9.png new file mode 100644 index 0000000..9bceb30 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/folder_icon_512x512.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/file_icon.9.png b/app/src/main/res/drawable-xxhdpi/file_icon.9.png new file mode 100644 index 0000000..e426542 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/file_icon.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/folder_icon_512x512.9.png b/app/src/main/res/drawable-xxhdpi/folder_icon_512x512.9.png new file mode 100644 index 0000000..82a1f4c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/folder_icon_512x512.9.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/file_icon.9.png b/app/src/main/res/drawable-xxxhdpi/file_icon.9.png new file mode 100644 index 0000000..39083e7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/file_icon.9.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/folder_icon_512x512.9.png b/app/src/main/res/drawable-xxxhdpi/folder_icon_512x512.9.png new file mode 100644 index 0000000..c6c7baa Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/folder_icon_512x512.9.png differ diff --git a/app/src/main/res/layout/file_item.xml b/app/src/main/res/layout/file_item.xml new file mode 100644 index 0000000..93d8996 --- /dev/null +++ b/app/src/main/res/layout/file_item.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml new file mode 100644 index 0000000..970d9ae --- /dev/null +++ b/app/src/main/res/layout/main_activity.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..a5ca56b --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 40dp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e2827ac..fcc46b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,13 @@ - lesson5 + File manager + File icon + Choose action + Successfully deleted + You can\'t delete this file + + + Open + Rename + Delete +