package com.ghostsq.commander.adapters;
import com.ghostsq.commander.FileCommander;
import com.ghostsq.commander.Panels;
import com.ghostsq.commander.R;
import com.ghostsq.commander.adapters.CommanderAdapter;
import com.ghostsq.commander.adapters.CommanderAdapterBase;
import com.ghostsq.commander.root.MountAdapter;
import com.ghostsq.commander.root.RootAdapter;
import com.ghostsq.commander.utils.Utils;
import android.content.Context;
import android.net.Uri;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.ViewGroup;
public class HomeAdapter extends CommanderAdapterBase {
private final static String TAG = "HomeAdapter";
public static final String DEFAULT_LOC = "home:";
private boolean root = false;
private static enum Mode {
FAVS( R.string.favs, R.string.favs_descr, R.drawable.favs ),
LOCAL( R.string.local, R.string.local_descr, R.drawable.sd ),
FTP( R.string.ftp, R.string.ftp_descr, R.drawable.ftp ),
SFTP( R.string.sftp, R.string.sftp_descr, R.drawable.sftp ),
SMB( R.string.smb, R.string.smb_descr, R.drawable.smb ),
BOX( R.string.box, R.string.box_descr, R.drawable.box ),
ROOT( R.string.root, R.string.root_descr, R.drawable.root ),
MOUNT( R.string.mount, R.string.mount_descr, R.drawable.mount ),
APPS( R.string.apps, R.string.apps_descr, R.drawable.android ),
EXIT( R.string.exit, R.string.exit_descr, R.drawable.exit );
public final int pos, name_id, descr_id, icon_id;
private Mode( int name_id_, int descr_id_, int icon_id_ ) {
pos = ordinal();
name_id = name_id_;
descr_id = descr_id_;
icon_id = icon_id_;
}
}
private Mode[] modes;
public HomeAdapter( Context ctx_ ) {
super( ctx_, DETAILED_MODE | NARROW_MODE | SHOW_ATTR | ATTR_ONLY );
modes = Mode.values();
numItems = getNumItems();
}
@Override
public int setMode( int mask, int val ) {
if( ( mask & ( MODE_WIDTH | MODE_DETAILS | MODE_ATTR ) ) == 0 )
super.setMode( mask, val );
mode &= ~ICON_TINY;
if( ( mask & MODE_ROOT ) != 0 ) {
root = ( mode & MODE_ROOT ) != 0;
numItems = getNumItems();
notifyDataSetChanged();
}
return mode;
}
@Override
public int getType() {
return CA.HOME;
}
@Override
public String toString() {
return "home:";
}
/*
* CommanderAdapter implementation
*/
@Override
public Uri getUri() {
return Uri.parse( toString() );
}
@Override
public void setUri( Uri uri ) {
}
@Override
public boolean readSource( Uri tmp_uri, String pbod ) {
notify( pbod );
return true;
}
@Override
public void reqItemsSize( SparseBooleanArray cis ) {
notErr();
}
@Override
public boolean copyItems( SparseBooleanArray cis, CommanderAdapter to, boolean move ) {
return notErr();
}
@Override
public boolean createFile( String fileURI ) {
return notErr();
}
@Override
public void createFolder( String new_name ) {
notErr();
}
@Override
public boolean deleteItems( SparseBooleanArray cis ) {
return notErr();
}
@Override
public void openItem( int position ) {
int p = translatePosition( position );
if( p < 0 || p >= modes.length ) return;
String uri_s = null;
if( p == Mode.FAVS.pos ) uri_s = "favs:"; else
if( p == Mode.LOCAL.pos) uri_s = Panels.DEFAULT_LOC; else
if( p == Mode.ROOT.pos ) uri_s = RootAdapter.DEFAULT_LOC; else
if( p == Mode.MOUNT.pos) uri_s = MountAdapter.DEFAULT_LOC; else
if( p == Mode.APPS.pos ) uri_s = "apps:"; else
if( p == Mode.BOX.pos ) uri_s = "box:"; else
if( p == Mode.FTP.pos ) { commander.dispatchCommand( FileCommander.FTP_ACT ); return; }
if( p == Mode.SFTP.pos ) { commander.dispatchCommand( FileCommander.SFTP_ACT); return; }
if( p == Mode.SMB.pos ) { commander.dispatchCommand( FileCommander.SMB_ACT ); return; }
if( p == Mode.EXIT.pos ) { commander.dispatchCommand( R.id.exit ); return; }
commander.Navigate( Uri.parse( uri_s ), null, null );
}
@Override
public boolean receiveItems( String[] full_names, int move_mode ) {
return notErr();
}
@Override
public boolean renameItem( int position, String newName, boolean c ) {
return notErr();
}
private int getNumItems() {
int num = modes.length;
if( !root ) num -= 2;
return num;
}
private int translatePosition( int p ) {
if( !root && p >= Mode.ROOT.pos )
p += 2;
return p;
}
@Override
public String getItemName( int p, boolean full ) {
return p >= 0 && p < modes.length ? s( modes[p].name_id ) : null;
}
/*
* BaseAdapter implementation
*/
@Override
public Object getItem( int position ) {
Utils.changeLanguage( ctx );
position = translatePosition( position );
Item item = new Item();
item.name = "???";
if( position >= 0 && position < modes.length ) {
item.name = getItemName( position, false );
item.icon_id = modes[position].icon_id;
item.attr = s( modes[position].descr_id );
}
return item;
}
@Override
public View getView( int position, View convertView, ViewGroup parent ) {
Item item = (Item)getItem( position );
if( item == null ) return null;
return getView( convertView, parent, item );
}
}