/*
* Copyright (C) 2014 Divide.io
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.example.client_sample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import com.jug6ernaut.android.logging.Logger;
import io.divide.client.BackendObject;
import io.divide.client.BackendServices;
import io.divide.client.BackendUser;
import io.divide.client.android.AuthActivity;
import io.divide.client.android.mock.DivideDrawer;
import io.divide.client.auth.LoginListener;
import io.divide.shared.file.Storage;
import io.divide.shared.file.XmlStorage;
import io.divide.shared.transitory.TransientObject;
import io.divide.shared.transitory.query.OPERAND;
import io.divide.shared.transitory.query.Query;
import io.divide.shared.transitory.query.QueryBuilder;
import rx.functions.Action1;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class MyActivity extends Activity {
private Logger logger = Logger.getLogger(MyActivity.class);
private MyApplication app;
private List<BackendObject> objectList = new ArrayList<BackendObject>();
private BackendObjectAdaper adapter;
private BackendUser user;
@InjectView(R.id.cachedUserTV) TextView savedUserTV;
@InjectView(R.id.loggedInUserTV) TextView loggedInUserTV;
@InjectView(R.id.usersLV) ListView usersLV;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DivideDrawer.attach(this, R.layout.main);
// setContentView(R.layout.main);
ButterKnife.inject(this);
getActionBar().setHomeButtonEnabled(true);
// au = AuthUtils.get(this, AuthManager.ACCOUNT_TYPE); TODO replace this
app = (MyApplication) this.getApplication();
BackendServices.addLoginListener(new LoginListener(){
@Override
public void onNext(BackendUser user) {
System.out.println("loginListener: setUser: " + user);
if(user != null){
setUser(user);
}
}
});
adapter = new BackendObjectAdaper(this,objectList);
usersLV.setAdapter(adapter);
usersLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
BackendObject o = adapter.getItem(position);
Query q = new QueryBuilder()
.delete()
.from(BackendObject.class)
.where(TransientObject.OBJECT_KEY, OPERAND.EQ, o.getObjectKey())
.build();
BackendServices.remote()
.query(BackendObject.class, q)
.subscribe(new Action1<Collection<BackendObject>>() {
@Override
public void call(Collection<BackendObject> backendObjects) {
getObjects();
}
});
BackendServices.local().delete(o);
}});
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(BackendUser.isLoggedIn())
getObjects();
else
logger.debug("Not signed in, not querying data.");
}
},1000);
Storage s = new XmlStorage(new File(this.getFilesDir() + File.separator + "something.xml"),Storage.MODE_WORLD_WRITEABLE);
String id = "something";
System.out.println("Stored: " + s.getString(id,""));
System.out.println("Stored: " + s.contains(id));
s.edit().putString(id,"something2").commit();
s.edit().putInt("int",55).commit();
}
@Override
public void onResume(){
super.onResume();
setUser(BackendUser.getUser());
}
@OnClick(R.id.loginButton)
public void login(){
Intent intent = new Intent(MyActivity.this, AuthActivity.class);
MyActivity.this.startActivity(intent);
}
@OnClick(R.id.clearSavedUserButton)
public void logout(){
BackendUser.logout();
savedUserTV.setText("Cached User: ");
loggedInUserTV.setText("User: ");
}
@OnClick(R.id.addObject)
public void addObject(){
if(user != null){
BackendServices
.remote()
.save(new BackendObject())
.subscribe(new Action1<Void>() {
@Override
public void call(Void s) {
getObjects();
}
});
}
}
@OnClick(R.id.getObjects)
public void getObjects(){
final Query q = new QueryBuilder()
.select()
.from(BackendObject.class)
.limit(10).build();
BackendServices.remote()
.query(BackendObject.class, q)
.subscribe(new Action1<Collection<BackendObject>>() {
@Override
public void call(Collection<BackendObject> objects) {
objectList.clear();
objectList.addAll(objects);
adapter.notifyDataSetChanged();
// BackendServices.local().save((BackendObject[]) objects.toArray());
// List<BackendObject> col = BackendServices.local().query(q);
// for (BackendObject o : col) logger.debug(o);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
logger.debug("",throwable);
}
});
}
private void setUser(BackendUser user){
if(user!=null){
// savedUserTV.setText("Cached User: " + getSavedUser(au)); TODO replace this
loggedInUserTV.setText("User: " + user);
this.user = user;
}
}
}