package edu.mit.mitmobile2.touchstone;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.jsoup.nodes.Document;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.MITClient;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.NewModuleActivity;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.libraries.LibraryModel.UserIdentity;
import edu.mit.mitmobile2.settings.SettingsModule;
public class TouchstonePrefsActivity extends NewModuleActivity implements OnSharedPreferenceChangeListener {
private Context mContext;
TextView emergencyContactsTV;
SharedPreferences pref;
String user;
String password;
WebView webview;
Document document;
EditText touchstoneUsername;
EditText touchstonePassword;
Button cancelButton;
Button doneButton;
Button touchstoneLogoutButton;
TextView mError;
private boolean credentialsChanged;
private LinearLayout touchstoneContents;
private FullScreenLoader touchstoneLoadingView;
public static SharedPreferences prefs;
public static final String TAG = "TouchstonePrefsActivity";
/**
* @throws IOException
* @throws ClientProtocolException **************************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG,"onCreate()");
super.onCreate(savedInstanceState);
mContext = this;
createViews();
addSecondaryTitle("MIT Touchstone");
}
private void createViews() {
Log.d(TAG,"createViews()");
setContentView(R.layout.touchstone_prefs);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
final SharedPreferences.Editor prefsEditor = prefs.edit();
touchstoneUsername = (EditText)findViewById(R.id.touchstoneUsername);
touchstonePassword = (EditText)findViewById(R.id.touchstonePassword);
// load existing pref values
touchstoneUsername.setText(prefs.getString("PREF_TOUCHSTONE_USERNAME", ""));
touchstonePassword.setText(prefs.getString("PREF_TOUCHSTONE_PASSWORD", ""));
doneButton = (Button)findViewById(R.id.touchstoneDoneButton);
cancelButton = (Button)findViewById(R.id.touchstoneCancelButton);
touchstoneLogoutButton = (Button)findViewById(R.id.touchstoneLogoutButton);
if (MITClient.cookieStore == null) {
touchstoneLogoutButton.setEnabled(false);
}
else {
touchstoneLogoutButton.setEnabled(true);
}
touchstoneLoadingView = (FullScreenLoader)findViewById(R.id.touchstoneLoadingView);
mError = (TextView)touchstoneLoadingView.findViewById(R.id.fullScreenLoadingErrorTV);
touchstoneContents = (LinearLayout)findViewById(R.id.touchstoneContents);
touchstoneUsername.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
credentialsChanged = true;
Log.d(TAG,"credentials changed");
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
touchstonePassword.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
credentialsChanged = true;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Log.d(TAG,"username = " + touchstoneUsername.getEditableText().toString());
Log.d(TAG,"password = " + touchstonePassword.getEditableText().toString());
prefsEditor.putString("PREF_TOUCHSTONE_USERNAME", touchstoneUsername.getEditableText().toString());
prefsEditor.putString("PREF_TOUCHSTONE_PASSWORD", touchstonePassword.getEditableText().toString());
prefsEditor.commit();
if (credentialsChanged) {
MITClient.cookieStore = null;
}
}
catch (RuntimeException e) {
Log.d(TAG,"error getting prefs: " + e.getMessage() + "\n" + e.getStackTrace());
}
Intent resultIntent = new Intent();
resultIntent.putExtra("msg","ok");
setResult(Activity.RESULT_OK, resultIntent);
Log.d("MITClient","finish()");
finish();
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
touchstoneLogoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MITClient.cookieStore = null;
v.setEnabled(false);
}
});
}
@SuppressWarnings("unused")
private Handler loginUiHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG,"handleMessage");
touchstoneContents.setVisibility(View.VISIBLE);
touchstoneLoadingView.setVisibility(View.GONE);
if (msg.arg1 == MobileWebApi.SUCCESS) {
Log.d(TAG,"MobileWebApi success");
UserIdentity identity = (UserIdentity)msg.obj;
Log.d(TAG,"identity = " + identity.getUsername());
}
else if (msg.arg1 == MobileWebApi.ERROR) {
Log.d(TAG,"show login error");
mError.setText("Error logging into Touchstone");
touchstoneLoadingView.showError();
}
else if (msg.arg1 == MobileWebApi.CANCELLED) {
touchstoneLoadingView.showError();
}
}
};
@Override
protected NewModule getNewModule() {
return new SettingsModule();
}
@Override
public boolean isModuleHomeActivity() {
return true;
}
public static String responseContentToString(HttpResponse response) {
try {
InputStream inputStream = response.getEntity().getContent();
ByteArrayOutputStream content = new ByteArrayOutputStream();
// Read response into a buffered stream
int readBytes = 0;
byte[] sBuffer = new byte[512];
while ((readBytes = inputStream.read(sBuffer)) != -1) {
content.write(sBuffer, 0, readBytes);
}
// Return result from buffered stream
String dataAsString = new String(content.toByteArray());
return dataAsString;
}
catch (IOException e) {
return null;
}
}
@Override
public synchronized void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// Context mContext = this;
// Handler uiHandler = new Handler();
// if (key.equalsIgnoreCase("PREF_TOUCHSTONE_USERNAME")) {
// mitClient.setUser(prefs.getString("PREF_TOUCHSTONE_USERNAME", null));
// }
//
// if (key.equalsIgnoreCase("PREF_TOUCHSTONE_PASSWORD")) {
// mitClient.setPassword(prefs.getString("PREF_TOUCHSTONE_PASSWORD", null));
// }
//
// Toast.makeText(this, "user set to " + mitClient.getUser(), Toast.LENGTH_SHORT).show();
}
@Override
protected boolean isScrollable() {
return true;
}
@Override
protected void onOptionSelected(String optionId) { }
}