package com.seafile.seadroid2.account.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import com.seafile.seadroid2.R;
import com.seafile.seadroid2.ui.activity.BaseActivity;
/**
* Shibboleth welcome page
* <p/>
*/
public class ShibbolethActivity extends BaseActivity implements Toolbar.OnMenuItemClickListener {
public static final String DEBUG_TAG = "ShibbolethActivity";
public static final String SHIBBOLETH_SERVER_URL = "shibboleth server url";
public static final String SHIBBOLETH_HTTP_PREFIX = "http://";
public static final String SHIBBOLETH_HTTPS_PREFIX = "https://";
private Button mNextBtn;
private CheckBox mHttpPrefixCb;
private EditText mServerUrlEt;
private static final int SHIBBOLETH_AUTH = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shibboleth_welcome_layout);
mNextBtn = (Button) findViewById(R.id.shibboleth_next_btn);
mServerUrlEt = (EditText) findViewById(R.id.shibboleth_server_url_et);
mHttpPrefixCb = (CheckBox) findViewById(R.id.shibboleth_http_cb);
mServerUrlEt.setText(SHIBBOLETH_HTTP_PREFIX);
int prefixLen = SHIBBOLETH_HTTP_PREFIX.length();
mServerUrlEt.setSelection(prefixLen, prefixLen);
setupServerText();
mNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = getServerUrl();
if (isServerUrlValid(url))
openAuthorizePage(url);
}
});
Toolbar toolbar = getActionBarToolbar();
toolbar.setOnMenuItemClickListener(this);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.shib_actionbar_title);
}
public void onHttpsCheckboxClicked(View view) {
boolean isHttps = mHttpPrefixCb.isChecked();
String url = mServerUrlEt.getText().toString();
String prefix = isHttps ? SHIBBOLETH_HTTPS_PREFIX : SHIBBOLETH_HTTP_PREFIX;
String urlWithoutScheme = url.replace(SHIBBOLETH_HTTPS_PREFIX, "").replace(SHIBBOLETH_HTTP_PREFIX, "");
int oldOffset = mServerUrlEt.getSelectionStart();
// Change the text
mServerUrlEt.setText(prefix + urlWithoutScheme);
if (mServerUrlEt.hasFocus()) {
// Change the cursor position since we changed the text
if (isHttps) {
int offset = oldOffset + 1;
mServerUrlEt.setSelection(offset, offset);
} else {
int offset = Math.max(0, oldOffset - 1);
mServerUrlEt.setSelection(offset, offset);
}
}
}
private void setupServerText() {
mServerUrlEt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.d(DEBUG_TAG, "serverText has focus: " + (hasFocus ? "yes" : "no"));
}
});
mServerUrlEt.addTextChangedListener(new TextWatcher() {
private String old;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
old = mServerUrlEt.getText().toString();
}
@Override
public void afterTextChanged(Editable s) {
// Don't allow the user to edit the "https://" or "http://" part of the serverText
String url = mServerUrlEt.getText().toString();
boolean isHttps = mHttpPrefixCb.isChecked();
String prefix = isHttps ? SHIBBOLETH_HTTPS_PREFIX : SHIBBOLETH_HTTP_PREFIX;
if (!url.startsWith(prefix)) {
int oldOffset = Math.max(prefix.length(), mServerUrlEt.getSelectionStart());
mServerUrlEt.setText(old);
mServerUrlEt.setSelection(oldOffset, oldOffset);
}
}
});
}
@Override
public boolean onMenuItemClick(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
private boolean isServerUrlValid(String serverUrl) {
if (serverUrl == null || serverUrl.isEmpty()) {
showShortToast(this, getString(R.string.shib_server_url_empty));
return false;
}
if (!serverUrl.startsWith(SHIBBOLETH_HTTP_PREFIX) && !serverUrl.startsWith(SHIBBOLETH_HTTPS_PREFIX)) {
showShortToast(this, getString(R.string.shib_server_incorrect_prefix));
return false;
}
return true;
}
private String getServerUrl() {
String serverUrl = mServerUrlEt.getText().toString().trim();
return serverUrl;
}
private void openAuthorizePage(String serverUrl) {
Intent intent = new Intent(ShibbolethActivity.this, ShibbolethAuthorizeActivity.class);
intent.putExtra(SHIBBOLETH_SERVER_URL, serverUrl);
intent.putExtras(getIntent());
startActivityForResult(intent, SHIBBOLETH_AUTH);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(DEBUG_TAG, "onActivityResult");
// pass auth result back to the SeafileAuthenticatorActivity
if (requestCode == SHIBBOLETH_AUTH) {
setResult(resultCode, data);
finish();
}
}
}