package com.example.avoscloud_demo;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Window;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import ar.com.daidalos.afiledialog.FileChooserDialog;
import com.avos.avoscloud.*;
import junit.framework.Assert;
import java.io.File;
import java.io.RandomAccessFile;
import static junit.framework.Assert.assertFalse;
public class SubclassDemoActivity extends DemoBaseActivity {
static final private String SIGNUP_TAG = "signup";
static final private String LOGIN_TAG = "login";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SubObject.registerSubclass(SubObject.class);
}
private class SubuserTask extends AsyncTask<String, Void, Void> {
volatile private String message = null;
volatile private Exception exception = null;
@Override
protected Void doInBackground(String ... params) {
message = params[0];
try {
if (params[1] == SIGNUP_TAG) {
subuserSignUpImpl(params[2], params[3]);
} else if (params[1] == LOGIN_TAG) {
subuserLoginImpl(params[2], params[3]);
}
} catch (Exception e) {
exception = e;
exception.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
SubclassDemoActivity.this.showMessage(message, exception, false);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
private class SubObjectTask extends AsyncTask<String, Void, Void> {
volatile private String message = null;
volatile private Exception exception = null;
@Override
protected Void doInBackground(String ... params) {
message = params[0];
try {
SubObject armor = new SubObject();
String displayName = "avos cloud subclass object.";
armor.setDisplayName(displayName);
armor.setBroken(false);
armor.save();
Assert.assertFalse(armor.getObjectId().isEmpty());
AVQuery<SubObject> query = AVObject.getQuery(SubObject.class);
SubObject result = query.get(armor.getObjectId());
Assert.assertTrue(result instanceof SubObject);
String value = result.getDisplayName();
Assert.assertEquals(value, displayName);
} catch (Exception e) {
exception = e;
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
SubclassDemoActivity.this.showMessage(message, exception, false);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
private void subuserSignUpImpl(final String username, final String password) throws Exception {
SubObject armor = new SubObject();
armor.setDisplayName("avos cloud demo object.");
armor.setBroken(false);
armor.save();
Assert.assertFalse(armor.getObjectId().isEmpty());
SubUser subUser = new SubUser();
String nickName = "testSignupSubUser";
subUser.setUsername(username);
subUser.setPassword(password);
subUser.setNickName(nickName);
subUser.setArmor(armor);
subUser.signUp();
Assert.assertFalse(subUser.getObjectId().isEmpty());
Assert.assertFalse(subUser.getSessionToken().isEmpty());
SubUser cloudUser = AVUser.logIn(username, password, SubUser.class);
Assert.assertTrue(cloudUser.getSessionToken() != null);
Assert.assertEquals(cloudUser.getObjectId(), subUser.getObjectId());
Assert.assertEquals(cloudUser.getSessionToken(), subUser.getSessionToken());
Assert.assertEquals(username, cloudUser.getUsername());
Assert.assertEquals(nickName, cloudUser.getNickName());
Assert.assertNotNull(cloudUser.getArmor());
AVUser currentUser = AVUser.getCurrentUser();
Assert.assertTrue(currentUser instanceof SubUser);
}
private void subuserLoginImpl(final String username, final String password) throws Exception {
SubUser.logIn(username, password);
AVUser currentUser = AVUser.getCurrentUser();
Assert.assertTrue(currentUser instanceof SubUser);
}
private void runLoginTask(final String string, final String username, final String password) {
SubuserTask task = new SubuserTask();
task.execute(string, LOGIN_TAG, username, password);
}
private void runSignUpTask(final String string, final String username, final String password) {
SubuserTask task = new SubuserTask();
task.execute(string, SIGNUP_TAG, username, password);
}
private void runSubObjectTask(final String string) {
SubObjectTask task = new SubObjectTask();
task.execute(string);
}
public void testSubUserSignup(final String string) throws AVException {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout layout = (LinearLayout)inflater.inflate(R.layout.login_dialog, null );
final EditText userNameET = (EditText)layout.findViewById(R.id.usernameInput);
final EditText passwordET = (EditText)layout.findViewById(R.id.passwordInput);
builder.setTitle("sign up").setPositiveButton(R.string.signup, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String username = userNameET.getText().toString();
String password = passwordET.getText().toString();
runSignUpTask(string, username, password);
}
}).setNegativeButton(R.string.login, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String username = userNameET.getText().toString();
String password = passwordET.getText().toString();
runLoginTask(string, username, password);
}
});
builder.setView(layout);
AlertDialog ad = builder.create();
ad.show();
}
public void testSubObject(final String string) throws Exception {
runSubObjectTask(string);
}
}