allow the user to select https (not working yet)
This commit is contained in:
parent
3d01ad74b8
commit
489273678f
4 changed files with 118 additions and 44 deletions
Binary file not shown.
|
@ -97,8 +97,30 @@ public class GitHandler extends ActionBarActivity {
|
||||||
case REQUEST_CLONE:
|
case REQUEST_CLONE:
|
||||||
setContentView(R.layout.activity_git_clone);
|
setContentView(R.layout.activity_git_clone);
|
||||||
|
|
||||||
|
final Spinner protcol_spinner = (Spinner) findViewById(R.id.clone_protocol);
|
||||||
|
final Spinner connection_mode_spinner = (Spinner) findViewById(R.id.connection_mode);
|
||||||
|
|
||||||
|
|
||||||
|
// init the spinner for connection modes
|
||||||
|
final ArrayAdapter<CharSequence> connection_mode_adapter = ArrayAdapter.createFromResource(this,
|
||||||
|
R.array.connection_modes, android.R.layout.simple_spinner_item);
|
||||||
|
connection_mode_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
connection_mode_spinner.setAdapter(connection_mode_adapter);
|
||||||
|
connection_mode_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
|
String selection = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString();
|
||||||
|
connectionMode = selection;
|
||||||
|
settings.edit().putString("git_remote_auth", selection).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> adapterView) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// init the spinner for protocols
|
// init the spinner for protocols
|
||||||
Spinner protcol_spinner = (Spinner) findViewById(R.id.clone_protocol);
|
|
||||||
ArrayAdapter<CharSequence> protocol_adapter = ArrayAdapter.createFromResource(this,
|
ArrayAdapter<CharSequence> protocol_adapter = ArrayAdapter.createFromResource(this,
|
||||||
R.array.clone_protocols, android.R.layout.simple_spinner_item);
|
R.array.clone_protocols, android.R.layout.simple_spinner_item);
|
||||||
protocol_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
protocol_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
@ -110,8 +132,22 @@ public class GitHandler extends ActionBarActivity {
|
||||||
protocol = ((Spinner)findViewById(R.id.clone_protocol)).getSelectedItem().toString();
|
protocol = ((Spinner)findViewById(R.id.clone_protocol)).getSelectedItem().toString();
|
||||||
if (protocol.equals("ssh://")) {
|
if (protocol.equals("ssh://")) {
|
||||||
((EditText)findViewById(R.id.clone_uri)).setHint("user@hostname:path");
|
((EditText)findViewById(R.id.clone_uri)).setHint("user@hostname:path");
|
||||||
|
|
||||||
|
((EditText) findViewById(R.id.server_port)).setHint(R.string.default_ssh_port);
|
||||||
|
|
||||||
|
// select ssh-key auth mode as default and enable the spinner in case it was disabled
|
||||||
|
connection_mode_spinner.setSelection(0);
|
||||||
|
connection_mode_spinner.setEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
((EditText)findViewById(R.id.clone_uri)).setHint("hostname/path");
|
((EditText)findViewById(R.id.clone_uri)).setHint("hostname/path");
|
||||||
|
|
||||||
|
((EditText) findViewById(R.id.server_port)).setHint(R.string.default_https_port);
|
||||||
|
|
||||||
|
// select user/pwd auth-mode and disable the spinner
|
||||||
|
connection_mode_spinner.setSelection(1);
|
||||||
|
connection_mode_spinner.setEnabled(false);
|
||||||
|
|
||||||
|
|
||||||
new AlertDialog.Builder(activity).
|
new AlertDialog.Builder(activity).
|
||||||
setMessage(activity.getResources().getString(R.string.read_only_dialog_text)).
|
setMessage(activity.getResources().getString(R.string.read_only_dialog_text)).
|
||||||
setCancelable(true).
|
setCancelable(true).
|
||||||
|
@ -131,25 +167,6 @@ public class GitHandler extends ActionBarActivity {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// init the spinner for connection modes
|
|
||||||
Spinner connection_mode_spinner = (Spinner) findViewById(R.id.connection_mode);
|
|
||||||
ArrayAdapter<CharSequence> connection_mode_adapter = ArrayAdapter.createFromResource(this,
|
|
||||||
R.array.connection_modes, android.R.layout.simple_spinner_item);
|
|
||||||
connection_mode_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
||||||
connection_mode_spinner.setAdapter(connection_mode_adapter);
|
|
||||||
connection_mode_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
|
||||||
@Override
|
|
||||||
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
|
|
||||||
String selection = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString();
|
|
||||||
connectionMode = selection;
|
|
||||||
settings.edit().putString("git_remote_auth", selection).apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNothingSelected(AdapterView<?> adapterView) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// init the server information
|
// init the server information
|
||||||
final EditText server_url = ((EditText) findViewById(R.id.server_url));
|
final EditText server_url = ((EditText) findViewById(R.id.server_url));
|
||||||
|
@ -259,30 +276,57 @@ public class GitHandler extends ActionBarActivity {
|
||||||
EditText server_port = ((EditText) findViewById(R.id.server_port));
|
EditText server_port = ((EditText) findViewById(R.id.server_port));
|
||||||
EditText server_path = ((EditText) findViewById(R.id.server_path));
|
EditText server_path = ((EditText) findViewById(R.id.server_path));
|
||||||
EditText server_user = ((EditText) findViewById(R.id.server_user));
|
EditText server_user = ((EditText) findViewById(R.id.server_user));
|
||||||
Log.i("GIT", "key entred");
|
|
||||||
|
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
String hostname =
|
switch (protocol)
|
||||||
server_user.getText()
|
{
|
||||||
+ "@" +
|
case "ssh://":
|
||||||
server_url.getText().toString().trim()
|
{
|
||||||
+ ":";
|
String hostname =
|
||||||
if (server_port.getText().toString().equals("22")) {
|
server_user.getText()
|
||||||
hostname += server_path.getText().toString();
|
+ "@" +
|
||||||
|
server_url.getText().toString().trim()
|
||||||
|
+ ":";
|
||||||
|
if (server_port.getText().toString().equals("22")) {
|
||||||
|
hostname += server_path.getText().toString();
|
||||||
|
|
||||||
((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
|
((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
TextView warn_url = (TextView) findViewById(R.id.warn_url);
|
TextView warn_url = (TextView) findViewById(R.id.warn_url);
|
||||||
if (!server_path.getText().toString().matches("/.*") && !server_port.getText().toString().isEmpty()) {
|
if (!server_path.getText().toString().matches("/.*") && !server_port.getText().toString().isEmpty()) {
|
||||||
warn_url.setText(R.string.warn_malformed_url_port);
|
warn_url.setText(R.string.warn_malformed_url_port);
|
||||||
warn_url.setVisibility(View.VISIBLE);
|
warn_url.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
warn_url.setVisibility(View.GONE);
|
warn_url.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
hostname += server_port.getText().toString() + server_path.getText().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hostname.equals("@:")) uri.setText(hostname);
|
||||||
}
|
}
|
||||||
hostname += server_port.getText().toString() + server_path.getText().toString();
|
break;
|
||||||
|
case "https://":
|
||||||
|
{
|
||||||
|
StringBuilder hostname = new StringBuilder();
|
||||||
|
hostname.append(server_url.getText().toString().trim());
|
||||||
|
|
||||||
|
if (server_port.getText().toString().equals("443")) {
|
||||||
|
hostname.append(server_path.getText().toString());
|
||||||
|
|
||||||
|
((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
hostname.append("/");
|
||||||
|
hostname.append(server_port.getText().toString())
|
||||||
|
.append(server_path.getText().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hostname.toString().equals("@/")) uri.setText(hostname);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hostname.equals("@:")) uri.setText(hostname);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,10 +550,9 @@ public class GitHandler extends ActionBarActivity {
|
||||||
// remember the settings
|
// remember the settings
|
||||||
SharedPreferences.Editor editor = settings.edit();
|
SharedPreferences.Editor editor = settings.edit();
|
||||||
|
|
||||||
// TODO this is not pretty, use the information obtained earlier
|
editor.putString("git_remote_server", ((EditText) findViewById(R.id.server_url)).getText().toString());
|
||||||
editor.putString("git_remote_server", hostname.split("@")[1].split(":")[0]);
|
editor.putString("git_remote_location", ((EditText) findViewById(R.id.server_path)).getText().toString());
|
||||||
editor.putString("git_remote_location", hostname.split("@")[1].split(":")[1]);
|
editor.putString("git_remote_username", ((EditText) findViewById(R.id.server_user)).getText().toString());
|
||||||
editor.putString("git_remote_username", hostname.split("@")[0]);
|
|
||||||
editor.putString("git_remote_protocol", protocol);
|
editor.putString("git_remote_protocol", protocol);
|
||||||
editor.putString("git_remote_auth", connectionMode);
|
editor.putString("git_remote_auth", connectionMode);
|
||||||
editor.putString("git_remote_port", port);
|
editor.putString("git_remote_port", port);
|
||||||
|
@ -731,7 +774,35 @@ public class GitHandler extends ActionBarActivity {
|
||||||
}
|
}
|
||||||
}).show();
|
}).show();
|
||||||
} else {
|
} else {
|
||||||
// BUG: we do not support HTTP yet...
|
final EditText password = new EditText(activity);
|
||||||
|
password.setHint("Password");
|
||||||
|
password.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
|
||||||
|
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||||
|
|
||||||
|
new AlertDialog.Builder(activity)
|
||||||
|
.setTitle(activity.getResources().getString(R.string.passphrase_dialog_title))
|
||||||
|
.setMessage(activity.getResources().getString(R.string.password_dialog_text))
|
||||||
|
.setView(password)
|
||||||
|
.setPositiveButton(activity.getResources().getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
|
|
||||||
|
SshSessionFactory.setInstance(new GitConfigSessionFactory());
|
||||||
|
try {
|
||||||
|
method.invoke(activity,
|
||||||
|
new UsernamePasswordCredentialsProvider(
|
||||||
|
settings.getString("git_remote_username", "zeapo"),
|
||||||
|
password.getText().toString())
|
||||||
|
);
|
||||||
|
} catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}).setNegativeButton(activity.getResources().getString(R.string.dialog_cancel), new DialogInterface.OnClickListener() {
|
||||||
|
public void onClick(DialogInterface dialog, int whichButton) {
|
||||||
|
// Do nothing.
|
||||||
|
}
|
||||||
|
}).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,5 +6,6 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="clone_protocols">
|
<string-array name="clone_protocols">
|
||||||
<item>ssh://</item>
|
<item>ssh://</item>
|
||||||
|
<item>https://</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
</resources>
|
</resources>
|
|
@ -63,6 +63,8 @@
|
||||||
<string name="server_url">Server URL</string>
|
<string name="server_url">Server URL</string>
|
||||||
<string name="server_url_hint">server.com</string>
|
<string name="server_url_hint">server.com</string>
|
||||||
<string name="server_port_hint">22</string>
|
<string name="server_port_hint">22</string>
|
||||||
|
<string name="default_ssh_port">22</string>
|
||||||
|
<string name="default_https_port">443</string>
|
||||||
<string name="server_path">Repo path</string>
|
<string name="server_path">Repo path</string>
|
||||||
<string name="server_path_hint">path/to/pass</string>
|
<string name="server_path_hint">path/to/pass</string>
|
||||||
<string name="server_user">Username</string>
|
<string name="server_user">Username</string>
|
||||||
|
|
Loading…
Reference in a new issue