Rework FPicker to use AsyncTask. Also change spaces to tabs.

This commit is contained in:
a1batross 2016-08-05 19:16:01 +06:00
parent 774ee7cf38
commit e75f120cf7

View file

@ -5,6 +5,7 @@ import android.app.ListActivity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Environment; import android.os.Environment;
import android.os.Bundle; import android.os.Bundle;
import android.os.Build; import android.os.Build;
@ -12,6 +13,9 @@ import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ImageView; import android.widget.ImageView;
@ -40,12 +44,15 @@ public class FPicker extends Activity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if ( sdk >= 21 ) if ( sdk >= 21 )
super.setTheme( 0x01030224 ); super.setTheme( 0x01030224 );
setContentView(R.layout.activity_fpicker); setContentView(R.layout.activity_fpicker);
String path = Environment.getExternalStorageDirectory().toString(); String path = Environment.getExternalStorageDirectory().toString();
currentDir = new File(path); currentDir = new File(path);
((Button)findViewById( R.id.button_fpicker_select )).setOnClickListener(new View.OnClickListener(){ ((Button)findViewById( R.id.button_fpicker_select )).setOnClickListener(new View.OnClickListener()
{
@Override @Override
public void onClick(View v) { public void onClick(View v)
{
onFileClick(v); onFileClick(v);
} }
}); });
@ -54,62 +61,97 @@ public class FPicker extends Activity {
private void fill(File folder) private void fill(File folder)
{ {
File[]dirs = folder.listFiles(); new Fill(folder).execute();
}
private class Fill extends AsyncTask<Void, Void, List<Item>>
{
File folder;
public Fill(File f)
{
folder = f;
}
protected List<Item> doInBackground(Void... voids)
{
File[] dirs = folder.listFiles();
List<Item> dir = new ArrayList<Item>();
while( dirs == null ) while( dirs == null )
{ {
folder = new File(folder.getParent()); folder = new File(folder.getParent());
if( folder == null ) if( folder == null )
return; return dir;
dirs = folder.listFiles(); dirs = folder.listFiles();
} }
this.setTitle("Current Dir: "+folder.getName());
List<Item> dir = new ArrayList<Item>();
for(File ff: dirs) for(File ff: dirs)
{ {
Date lastModDate = new Date(ff.lastModified()); Date lastModDate = new Date(ff.lastModified());
DateFormat formater = DateFormat.getDateTimeInstance(); DateFormat formater = DateFormat.getDateTimeInstance();
String date_modify = formater.format(lastModDate); String date_modify = formater.format(lastModDate);
if(ff.isDirectory()){ if(ff.isDirectory())
{
boolean isXashDir=false; boolean isXashDir=false;
File[] fbuf = ff.listFiles(); File[] fbuf = ff.listFiles();
int buf = 0; int buf = 0;
if(fbuf != null&&fbuf.length<20){ if(fbuf != null&&fbuf.length<20)
{
buf = fbuf.length; buf = fbuf.length;
for (File valves: fbuf) { for (File valves: fbuf)
if (valves.isDirectory()) { {
if(valves.getName().contains("valve"))isXashDir=true; if (valves.isDirectory() && valves.getName().contains("valve"))
isXashDir=true;
} }
} }
}
String num_item = String.valueOf(buf);
if(buf == 0) num_item = "Some items";
else num_item +=" items";
if(isXashDir){
dir.add(new Item(ff.getName(),num_item,date_modify,ff.getAbsolutePath(),R.drawable.ic_launcher));
}else { String num_item = String.valueOf(buf);
if(buf == 0)
num_item = "Some items";
else
num_item +=" items";
if(isXashDir)
{
dir.add(new Item(ff.getName(), num_item, date_modify, ff.getAbsolutePath(), R.drawable.ic_launcher));
}
else
{
dir.add(new Item(ff.getName(), num_item, date_modify, ff.getAbsolutePath(), R.drawable.folder)); dir.add(new Item(ff.getName(), num_item, date_modify, ff.getAbsolutePath(), R.drawable.folder));
}} }
}
} }
Collections.sort(dir); Collections.sort(dir);
if(folder.getName().length()>1)
dir.add(0,new Item("..","Parent Directory","",folder.getParent(),R.drawable.folder)); if(folder.getName().length() > 1)
dir.add(0, new Item( "..", "Parent Directory", "", folder.getParent(), R.drawable.folder));
return dir;
}
protected void onPostExecute(List<Item> dir)
{
setTitle("Current Dir: "+folder.getName());
adapter = new FileArrayAdapter(FPicker.this,R.layout.row,dir); adapter = new FileArrayAdapter(FPicker.this,R.layout.row,dir);
delta = (ListView)findViewById(R.id.FileView); delta = (ListView)findViewById(R.id.FileView);
delta.setAdapter(adapter); delta.setAdapter(adapter);
delta.setOnItemClickListener(new AdapterView.OnItemClickListener( ){ delta.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override @Override
public void onItemClick(AdapterView<?> parent , View v, int position, long id) { public void onItemClick(AdapterView<?> parent , View v, int position, long id)
{
Item o = adapter.getItem(position); Item o = adapter.getItem(position);
currentDir = new File(o.getPath()); currentDir = new File(o.getPath());
fill(currentDir); fill(currentDir);
} }
}); });
} }
}
public void onFileClick(View v) public void onFileClick(View v)
{ {
Toast.makeText(this, "Chosen path : " + currentDir, Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Chosen path : " + currentDir, Toast.LENGTH_SHORT).show();
@ -118,43 +160,44 @@ public class FPicker extends Activity {
setResult(RESULT_OK, intent); setResult(RESULT_OK, intent);
finish(); finish();
} }
} }
class FileArrayAdapter extends ArrayAdapter<Item> {
class FileArrayAdapter extends ArrayAdapter<Item>
{
private Context c; private Context c;
private int id; private int id;
private List<Item>items; private List<Item>items;
public FileArrayAdapter(Context context, int textViewResourceId, public FileArrayAdapter(Context context, int textViewResourceId, List<Item> objects)
List<Item> objects) { {
super(context, textViewResourceId, objects); super(context, textViewResourceId, objects);
c = context; c = context;
id = textViewResourceId; id = textViewResourceId;
items = objects; items = objects;
} }
public Item getItem(int i) public Item getItem(int i)
{ {
return items.get(i); return items.get(i);
} }
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView; View v = convertView;
if (v == null) { if (v == null)
{
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null); v = vi.inflate(id, null);
} }
final Item finstance = items.get(position); final Item finstance = items.get(position);
if (finstance != null) { if (finstance != null)
{
TextView filename = (TextView) v.findViewById(R.id.filename); TextView filename = (TextView) v.findViewById(R.id.filename);
TextView fileitems = (TextView) v.findViewById(R.id.fileitems); TextView fileitems = (TextView) v.findViewById(R.id.fileitems);
TextView filedate = (TextView) v.findViewById(R.id.filedate); TextView filedate = (TextView) v.findViewById(R.id.filedate);
ImageView imageicon = (ImageView) v.findViewById(R.id.fd_Icon1); ImageView imageicon = (ImageView) v.findViewById(R.id.fd_Icon1);
Drawable image = c.getResources().getDrawable(finstance.getImage()); Drawable image = c.getResources().getDrawable(finstance.getImage());
imageicon.setImageDrawable(image); imageicon.setImageDrawable(image);
@ -168,6 +211,7 @@ class FileArrayAdapter extends ArrayAdapter<Item> {
return v; return v;
} }
} }
class Item implements Comparable<Item>{ class Item implements Comparable<Item>{
private String name; private String name;
private String data; private String data;
@ -183,26 +227,34 @@ class Item implements Comparable<Item>{
path = p; path = p;
image = img; image = img;
} }
public String getName() public String getName()
{ {
return name; return name;
} }
public String getData() public String getData()
{ {
return data; return data;
} }
public String getDate() public String getDate()
{ {
return date; return date;
} }
public String getPath() public String getPath()
{ {
return path; return path;
} }
public int getImage() {
public int getImage()
{
return image; return image;
} }
public int compareTo(Item o) {
public int compareTo(Item o)
{
if(this.name != null) if(this.name != null)
return this.name.toLowerCase().compareTo(o.getName().toLowerCase()); return this.name.toLowerCase().compareTo(o.getName().toLowerCase());
else else