package org.opensourcetlapp.tl;
import java.io.IOException;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MytlnetFragment extends Fragment implements Runnable {
private Button loginButton;
private Button logoutButton;
private EditText usernameEditText;
private EditText passwordEditText;
private ProgressDialog progressDialog;
private TLHandler handler;
private Context context;
private Button subButton;
private Button postsButton;
private Button pmButton;
private CheckBox rememberMeCheckBox;
private ViewGroup container;
private DBHelper db;
private MytlnetFragment instance;
private LinearLayout loggedInView;
private LinearLayout loggedOutView;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.container = container;
View view = inflater.inflate(R.layout.mytlnet,container,false);
db = new DBHelper(getActivity());
loggedInView = (LinearLayout) view.findViewById(R.id.loggedIn);
loggedOutView = (LinearLayout) view.findViewById(R.id.loggedOut);
loginButton = (Button) view.findViewById(R.id.loginButton);
logoutButton = (Button) view.findViewById(R.id.logoutButton);
usernameEditText = (EditText) view.findViewById(R.id.username);
passwordEditText = (EditText) view.findViewById(R.id.password);
context = getActivity();
instance = this;
logoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogoutTask logoutTask = new LogoutTask();
logoutTask.execute();
}
});
loginButton.setText("Login");
Typeface tf = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
loginButton.setTypeface(tf);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setLoggedIn();
progressDialog = ProgressDialog.show(getActivity(), null,
"Logging in...", true, true);
handler = new LoginHandler(progressDialog, context);
new Thread((Runnable) instance).start();
}
});
pmButton = (Button)view.findViewById(R.id.pmButton);
pmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent().setClass(context,
ShowMyPM.class);
startActivity(intent);
}
});
postsButton = (Button) view.findViewById(R.id.viewPostsButton);
postsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent().setClass(context,
MyPosts.class);
startActivity(intent);
}
});
subButton = (Button)view.findViewById(R.id.subButton);
subButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent().setClass(context,
MySubs.class);
startActivity(intent);
}
});
rememberMeCheckBox = (CheckBox) view.findViewById(R.id.rememberMeCheckBox);
rememberMeCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
if (checkBox.isChecked()) {
db.insertUser(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
} else {
db.deleteUser();
}
}
});
Button settingsButton = (Button) view.findViewById(R.id.settingsButton);
settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent().setClass(context, Settings.class));
}
});
Cursor userCursor = db.getUser();
userCursor.moveToFirst();
if (!userCursor.isAfterLast()) {
String username = userCursor.getString(userCursor
.getColumnIndex("username"));
String password = userCursor.getString(userCursor
.getColumnIndex("password"));
int valid = userCursor.getInt(userCursor.getColumnIndex("valid"));
rememberMeCheckBox.setChecked(true);
usernameEditText.setText(username);
passwordEditText.setText(password);
if (valid == 1) {
loginButton.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DPAD_CENTER));
loginButton.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_DPAD_CENTER));
}
}
usernameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if (rememberMeCheckBox.isChecked()) {
db.insertUser(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
});
passwordEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if (rememberMeCheckBox.isChecked()) {
db.insertUser(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
});
userCursor.close();
return view;
}
private void setLoggedIn(){
usernameEditText.setEnabled(false);
passwordEditText.setEnabled(false);
pmButton.setEnabled(true);
postsButton.setEnabled(true);
subButton.setEnabled(true);
}
private void setLoggedOut(){
usernameEditText.setEnabled(true);
passwordEditText.setEnabled(true);
postsButton.setEnabled(false);
pmButton.setEnabled(false);
subButton.setEnabled(false);
}
private class LoginHandler extends TLHandler {
public LoginHandler(ProgressDialog progressDialog, Context context) {
super(progressDialog, context);
}
@Override
public void handleMessage(Message msg) {
if (msg.what == 0 && this.progressStatus == TLHandler.PROGRESS_OKAY) {
progressDialog.dismiss();
} else if (msg.what == 1) {
loggedOutView.setVisibility(LinearLayout.GONE);
loggedInView.setVisibility(LinearLayout.VISIBLE);
buildLoggedInView();
} else if (msg.what == 2) {
setLoggedOut();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
alertDialogBuilder.setTitle("Login Error");
alertDialogBuilder
.setMessage("Invalid username and/or password.");
alertDialogBuilder.setPositiveButton("Okay", null);
alertDialogBuilder.show();
} else if (msg.what == 3) {
setLoggedOut();
} else {
super.handleMessage(msg);
}
}
}
private class LogoutTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
try {
TLLib.logout();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
setLoggedOut();
loggedInView.setVisibility(LinearLayout.GONE);
loggedOutView.setVisibility(LinearLayout.VISIBLE);
} else
Toast.makeText(context, "Logout failed!", Toast.LENGTH_SHORT).show();
}
}
private void buildLoggedInView() {
((TextView)loggedInView.findViewById(R.id.usernameText)).setText(usernameEditText.getText());
}
@Override
public void run() {
try {
if (TLLib.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString(), handler, context)) {
db.validateUser();
handler.sendEmptyMessage(1);
} else {
db.invalidateUser();
handler.sendEmptyMessage(2);
}
} catch (IOException e) {
handler.sendEmptyMessage(3);
handler.progressStatus = TLHandler.PROGRESS_NETWORK_DOWN;
}
handler.sendEmptyMessage(0);
}
@Override
public void onDestroy(){
super.onDestroy();
db.close();
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater menuInflater) {
menuInflater.inflate(R.menu.show_forums_menu, menu);
}
}