package net.bradmont.openmpd.activities;
import java.net.URL;
import java.util.Vector;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import android.app.Activity;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Binder;
import android.os.IBinder;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View.OnClickListener;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.widget.TextView;
import net.bradmont.openmpd.controllers.*;
import net.bradmont.openmpd.fragments.onboard.*;
import net.bradmont.openmpd.views.*;
import net.bradmont.openmpd.*;
import net.bradmont.supergreen.models.*;
public class ImportActivity extends Activity {
private int mTitleRes = R.string.app_name;
private NoScrollListView mAccountList = null;
private SimpleCursorAdapter mAdapter = null;
private static final String ACCOUNT_QUERY = "select service_account._id, name, balance_url, username from service_account join tnt_service on tnt_service_id=tnt_service._id" ;
private static ImportActivity mInstance = null;
private Vector<ProgressBar> mProgressBars = new Vector<ProgressBar>(10);
public ImportActivity() {
mInstance = this;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(mTitleRes);
setContentView(R.layout.onboard_import);
mAccountList = (NoScrollListView) findViewById(R.id.account_list);
Cursor cursor = OpenMPD.getDB().getReadableDatabase().rawQuery(ACCOUNT_QUERY, null);
String [] columns = {"name", "username", "balance_url"};
int [] fields = {R.id.name, R.id.username, R.id.url};
mAdapter = new SimpleCursorAdapter(this,
R.layout.onboard_import_list_item, cursor, columns, fields);
mAdapter.setViewBinder( new SimpleCursorAdapter.ViewBinder(){
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
TextView tv = (TextView) view;
switch(columnIndex){
case 2:
try {
tv.setText(new URL(cursor.getString(2)).getHost());
return true;
} catch (Exception e){
}
return false;
}
return false;
}
});
mAccountList.setAdapter(mAdapter);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
public void onBackPressed() {
//super.onBackPressed();
return ;
}
@Override
public void onStart(){
super.onStart();
mInstance = this;
// launch TntImportService
ModelList accounts = MPDDBHelper
.get()
.getReferenceModel("service_account")
.getAll();
int [] account_ids = new int [accounts.size()];
for (int i = 0; i < accounts.size(); i++){
if (i == 0){
// set indeterminate on first bar, as it doesn't seem to happen all the time
}
account_ids[i] = accounts.get(i).getID();
}
startService(
new Intent(this, TntImportService.class)
.putExtra("net.bradmont.openmpd.account_ids", account_ids)
.putExtra("net.bradmont.openmpd.force_update", true)
);
}
public void onStop(){
mInstance = null;
super.onStop();
}
public static void onFinish(){
if (mInstance != null){
mInstance.getSharedPreferences("openmpd", Context.MODE_PRIVATE)
.edit()
.putInt("onboardState", OpenMPD.ONBOARD_FINISHED)
.commit(); // Onboarding done
Intent switchIntent = new Intent(mInstance, HomeActivity.class);
switchIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mInstance.startActivity(switchIntent);
mInstance.finish();
}
}
public static void setProgress(int accountId, int progressMax, int progress, boolean indeterminate){
if (mInstance == null){return;}
ProgressBar bar = null;
if (mInstance.mProgressBars.size() <= accountId + 1 ||
mInstance.mProgressBars.get(accountId +1) == null){
if (accountId == -1){
// the "Evaluating contacts" progress bar
bar = (ProgressBar) mInstance.findViewById(R.id.eval_progressbar);
} else {
View v = mInstance.findListItem(accountId);
if (v != null){
bar = (ProgressBar) v.findViewById(R.id.progressbar);
}
}
while (mInstance.mProgressBars.size() <= accountId + 1){
mInstance.mProgressBars.addElement(null);
}
mInstance.mProgressBars.set(accountId+1, bar);
} else {
bar=mInstance.mProgressBars.get(accountId +1);
}
if (bar != null){
bar.setMax(progressMax);
bar.setProgress(progress);
bar.setIndeterminate(indeterminate);
}
}
public static void setStatus(int accountId, final int resId){
if (mInstance == null){return;}
TextView text = null;
if (accountId == -1){
text = (TextView) mInstance.findViewById(R.id.eval_status);
} else {
View v = mInstance.findListItem(accountId);
if (v != null){
text = (TextView) v.findViewById(R.id.import_status);
}
}
if (text != null){
final TextView tv = text;
mInstance.runOnUiThread(new Runnable(){
public void run(){
tv.setText(resId);
}
});
}
}
public View findListItem(int accountId){
Cursor c = mAdapter.getCursor();
c.moveToFirst();
// TODO: cache these values
while (c.getInt(0) != accountId && !c.isAfterLast()){
c.moveToNext();
}
int first = mAccountList.getFirstVisiblePosition() - mAccountList.getHeaderViewsCount();
int wanted = c.getPosition();
if (wanted < first || wanted >= first + mAccountList.getChildCount()){
return null;
}
return mAccountList.getChildAt(wanted - first);
}
}