package com.ghostsq.commander.favorites; import com.ghostsq.commander.R; import com.ghostsq.commander.adapters.FavsAdapter; import com.ghostsq.commander.utils.Utils; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.net.Uri; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; public class FavDialog implements OnClickListener { public final static String TAG = "FavDialog"; private FavsAdapter owner; private Favorite f; private Uri uri; private EditText ce, pe, se, de, ue, we; private Spinner en; private boolean sftp, ftp, smb; public FavDialog( Context c, Favorite f_, FavsAdapter owner_ ) { try { owner = owner_; f = f_; uri = f.getUri(); if( uri == null ) return; LayoutInflater factory = LayoutInflater.from( c ); View fdv = factory.inflate( R.layout.server, null ); if( fdv == null ) return; View bb = fdv.findViewById( R.id.buttons_block ); bb.setVisibility( View.GONE ); View cb = fdv.findViewById( R.id.comment_block ); cb.setVisibility( View.VISIBLE ); ce = (EditText)cb.findViewById( R.id.comment_edit ); ce.setText( f.getComment() ); pe = (EditText)fdv.findViewById( R.id.path_edit ); String path = uri.getPath(); /* String quer = uri.getQuery(); if( quer != null ) path += "?" + quer; String frag = uri.getFragment(); if( frag != null ) path += "#" + frag; */ pe.setText( path ); String schm = uri.getScheme(); View sb = fdv.findViewById( R.id.server_block ); View ib = fdv.findViewById( R.id.credentials_block ); View eb = fdv.findViewById( R.id.encoding_block ); sftp = "sftp".equals( schm ); ftp = "ftp".equals( schm ); smb = "smb".equals( schm ); if( ftp || smb || sftp ) { se = (EditText)sb.findViewById( R.id.server_edit ); String host = uri.getHost(); if( host != null ) { int port = uri.getPort(); if( port > 0 ) host += ":" + port; se.setText( host ); } if( ftp || sftp ) { View db = ib.findViewById( R.id.domain_block ); db.setVisibility( View.GONE ); } String username = f.getUserName(); if( smb && username != null ) { int sep = username.indexOf( '\\' ); if( sep < 0 ) sep = username.indexOf( ';' ); de = (EditText)ib.findViewById( R.id.domain_edit ); if( sep >= 0 ) { de.setText( username.substring( 0, sep ) ); username = username.substring( sep+1 ); } } ue = (EditText)ib.findViewById( R.id.username_edit ); ue.setText( username ); we = (EditText)ib.findViewById( R.id.password_edit ); we.setText( f.getPassword() ); eb.setVisibility( ftp ? View.VISIBLE : View.GONE ); if( ftp ) { en = (Spinner)eb.findViewById( R.id.encoding ); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( c, R.array.encoding, android.R.layout.simple_spinner_item ); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); en.setAdapter( adapter ); try { String enc_s = uri.getQueryParameter( "e" ); if( Utils.str( enc_s ) && !"Default".equals( enc_s ) ) { for( int i = 0; i < adapter.getCount(); i++ ) if( adapter.getItem( i ).toString().indexOf( enc_s ) == 0 ) { en.setSelection( i ); break; } } } catch( Exception e ) { Log.e( TAG, "", e ); } } } else { sb.setVisibility( View.GONE ); ib.setVisibility( View.GONE ); eb.setVisibility( View.GONE ); } new AlertDialog.Builder( c ) .setTitle( c.getString( R.string.fav_dialog ) ) .setView( fdv ) .setPositiveButton( R.string.dialog_ok, this ) .setNegativeButton( R.string.dialog_cancel, this ) .show(); } catch( Exception e ) { Log.e( TAG, null, e ); } } @Override public void onClick( DialogInterface idialog, int whichButton ) { if( whichButton == DialogInterface.BUTTON_POSITIVE ) { try { f.setComment( ce.getText().toString() ); String path = pe.getText().toString().trim(); if( se != null ) { Uri.Builder uri_b = uri.buildUpon(); if( ftp ) { uri_b.encodedQuery( "" ); String a_s = uri.getQueryParameter( "a" ); if( Utils.str( a_s ) ) uri_b.appendQueryParameter( "a", a_s ); Object esio = en.getSelectedItem(); if( esio instanceof String ) { String enc_s = (String)esio; if( Utils.str( enc_s ) && !"Default".equals( enc_s ) ) { enc_s = enc_s.substring( 0, enc_s.indexOf( "\n" ) ); uri_b.appendQueryParameter( "e", enc_s ); } } } String serv = se.getText().toString().trim(); f.setUri( uri_b.encodedAuthority( Utils.encodeToAuthority( serv ) ). encodedPath( Utils.escapePath( path ) ).build() ); Log.i( TAG, "Uri:" + f.getUri() ); String domain = de != null ? de.getText().toString().trim() : ""; String usernm = ue.getText().toString().trim(); f.setCredentials( domain.length() > 0 ? domain + ";" + usernm : usernm, we.getText().toString().trim() ); } else { f.setUri( uri.buildUpon().encodedPath( Utils.escapePath( path ) ).build() ); } owner.invalidate(); } catch( Exception e ) { Log.e( TAG, null, e ); } } } }