You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
8.1 KiB
Java
231 lines
8.1 KiB
Java
package com.waveshare.epaperesp32loader;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
import android.os.Environment;
|
|
import android.provider.MediaStore;
|
|
import android.support.annotation.NonNull;
|
|
import android.support.v7.app.AppCompatActivity;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.Window;
|
|
import android.widget.AdapterView;
|
|
import android.widget.ArrayAdapter;
|
|
import android.widget.ListView;
|
|
import android.widget.TextView;
|
|
|
|
import com.waveshare.epaperesp32loader.communication.PermissionHelper;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
|
|
/**
|
|
* <h1>Open file activity</h1>
|
|
* The activity if a simple file browser.
|
|
* It provides the file choosing within the external storage.
|
|
*
|
|
* @author Waveshare team
|
|
* @version 1.0
|
|
* @since 8/17/2018
|
|
*/
|
|
|
|
public class OpenFileActivity extends AppCompatActivity implements AdapterView.OnItemClickListener
|
|
{
|
|
// Permission
|
|
//--------------------------------------
|
|
private PermissionHelper permissionHelper;
|
|
private ReadPermissionResponse permissionResponse;
|
|
|
|
// Views
|
|
//--------------------------------------
|
|
public TextView textView;
|
|
public ListView listView;
|
|
|
|
// Files
|
|
//--------------------------------------
|
|
public File thisFolder;
|
|
public String externalStorage;
|
|
|
|
// File list
|
|
//--------------------------------------
|
|
public ArrayList<File> fileArrayList;
|
|
public FileListAdapter fileListAdapter;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState)
|
|
{
|
|
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.open_file_activity);
|
|
getSupportActionBar().setTitle(R.string.file);
|
|
|
|
// Permission (READ_EXTERNAL_STORAGE)
|
|
//--------------------------------------
|
|
permissionHelper = new PermissionHelper(this);
|
|
permissionResponse = new ReadPermissionResponse();
|
|
permissionHelper.setResponse(PermissionHelper.REQ_READ, permissionResponse);
|
|
|
|
// Views
|
|
//--------------------------------------
|
|
textView = findViewById(R.id.open_file_text);
|
|
listView = findViewById(R.id.open_file_list);
|
|
|
|
// File list adapter
|
|
//--------------------------------------
|
|
fileArrayList = new ArrayList<>();
|
|
fileListAdapter = new FileListAdapter(this, fileArrayList);
|
|
|
|
listView.setAdapter(fileListAdapter);
|
|
listView.setOnItemClickListener(this);
|
|
|
|
// Set current folder
|
|
//--------------------------------------
|
|
externalStorage = Environment.getExternalStorageDirectory().getAbsolutePath();
|
|
String fileName = AppStartActivity.filePath;
|
|
|
|
thisFolder = (fileName == null) || !fileName.startsWith(externalStorage)
|
|
? Environment.getExternalStorageDirectory()
|
|
: new File(fileName);
|
|
|
|
select(thisFolder);
|
|
}
|
|
|
|
public void select(File folder)
|
|
{
|
|
// Set folder's file into the permission's response
|
|
//-----------------------------------------------------
|
|
permissionResponse.file = folder;
|
|
|
|
// Check permission and run response if it's granted
|
|
//-----------------------------------------------------
|
|
if (permissionHelper.sendRequestPermission(PermissionHelper.REQ_READ))
|
|
permissionResponse.invoke();
|
|
}
|
|
|
|
// On coming to parent folder event handler
|
|
//---------------------------------------------------------
|
|
public void onBack(View view)
|
|
{
|
|
// Exit if the external storage root is current folder
|
|
//-----------------------------------------------------
|
|
if (thisFolder.getAbsolutePath().equals(
|
|
Environment.getExternalStorageDirectory().getAbsolutePath())) return;
|
|
|
|
// Setup parent folder
|
|
//-----------------------------------------------------
|
|
thisFolder = thisFolder.getParentFile();
|
|
textView.setText(thisFolder.getPath());
|
|
|
|
// Update list of files
|
|
//-----------------------------------------------------
|
|
fileArrayList.clear();
|
|
fileArrayList.addAll(Arrays.asList(thisFolder.listFiles()));
|
|
fileListAdapter.notifyDataSetChanged();
|
|
}
|
|
|
|
public void onCancel(View view)
|
|
{
|
|
onBackPressed();
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed()
|
|
{
|
|
setResult(RESULT_CANCELED, new Intent());
|
|
finish();
|
|
}
|
|
|
|
@Override
|
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
|
|
{
|
|
select(fileListAdapter.getItem(i));
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// File list adapter
|
|
//---------------------------------------------------------
|
|
private class FileListAdapter extends ArrayAdapter<File>
|
|
{
|
|
public FileListAdapter(Context context, ArrayList<File> files)
|
|
{
|
|
super(context, android.R.layout.simple_list_item_1, files);
|
|
}
|
|
|
|
@Override
|
|
public View getView(int position, View convertView, ViewGroup parent)
|
|
{
|
|
// Get list item view and its file
|
|
//-------------------------------------------------
|
|
TextView view = (TextView) super.getView(position, convertView, parent);
|
|
File file = getItem(position);
|
|
|
|
// Put the name of the file into its view
|
|
//-------------------------------------------------
|
|
if(view != null) view.setText(file.getName());
|
|
return view;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------
|
|
// Result of permission request
|
|
//------------------------------------------
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
|
|
{
|
|
permissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// Permission responses
|
|
//---------------------------------------------------------
|
|
class ReadPermissionResponse implements PermissionHelper.PermissionResponse
|
|
{
|
|
public File file;
|
|
|
|
@Override
|
|
public void invoke()
|
|
{
|
|
// Check if the file is located in external storage
|
|
//-------------------------------------------------
|
|
if ((file == null) || !file.getAbsolutePath().startsWith(externalStorage))
|
|
file = Environment.getExternalStorageDirectory();
|
|
|
|
// Case of file: return its name and path
|
|
//-------------------------------------------------
|
|
if (file.isFile())
|
|
{
|
|
AppStartActivity.fileName = file.getName();
|
|
AppStartActivity.filePath = thisFolder.getAbsolutePath();
|
|
setResult(RESULT_OK, new Intent());
|
|
finish();
|
|
}
|
|
|
|
// Case of folder: return its name and path
|
|
//-------------------------------------------------
|
|
else
|
|
{
|
|
String message = "Current location: ";
|
|
message += file.getAbsolutePath().substring(externalStorage.length());
|
|
textView.setText(message);
|
|
|
|
// Get items of the folder
|
|
//---------------------------------------------
|
|
File[] files = file.listFiles();
|
|
if (files == null) return;
|
|
|
|
// Mark the folder as current one
|
|
//---------------------------------------------
|
|
thisFolder = file;
|
|
|
|
// Update file list view
|
|
//---------------------------------------------
|
|
fileArrayList.clear();
|
|
fileArrayList.addAll(Arrays.asList(files));
|
|
fileListAdapter.notifyDataSetChanged();
|
|
}
|
|
}
|
|
}
|
|
} |