package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
import com.iwedia.comm.system.account.Account;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.components.A4TVTextView;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.mainmenu.DialogCreatorClass;
import com.iwedia.gui.mainmenu.DialogManager;
import java.util.ArrayList;
public class AccountsAndSyncAddAccountDialog extends A4TVDialog implements
A4TVDialogInterface, android.view.View.OnClickListener,
OnItemClickListener {
// fields for creating dialogs
private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(),
contentListIDs = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> titleIDs = new ArrayList<Integer>();
private ArrayList<Account> accounts = new ArrayList<Account>();
private Context ctx;
private ManageAccountsAdapter listAdapter;
private ListView listViewAccounts;
public AccountsAndSyncAddAccountDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
// fill lists
returnArrayListsWithDialogContents(contentList, contentListIDs,
titleIDs);
// set content to dialog
fillDialog();
// set attributes
setDialogAttributes();
init();
}
@Override
public void show() {
if (fillViews()) {
super.show();
}
}
private void init() {
listViewAccounts = (ListView) findViewById(DialogCreatorClass.LIST_VIEW_IN_DIALOG_ID);
listViewAccounts.setAdapter(listAdapter);
listViewAccounts.setOnItemClickListener(this);
}
private boolean fillViews() {
accounts.clear();
accounts = null;
try {
accounts = (ArrayList<Account>) MainActivity.service
.getSystemControl().getAccountSyncControl()
.getAvailableAccounts();
} catch (Exception e) {
e.printStackTrace();
}
if (accounts != null) {
listAdapter.notifyDataSetChanged();
return true;
} else {
A4TVToast toast = new A4TVToast(getContext());
toast.showToast(R.string.no_accout_message);
return false;
}
}
@Override
public void fillDialog() {
listAdapter = new ManageAccountsAdapter();
View view = DialogManager.dialogCreator.fillDialogWithContents(
contentList, contentListIDs, titleIDs, null, this, listAdapter);// ,
// pictureBackgroundID);
setContentView(view);
}
@Override
public void setDialogAttributes() {
getWindow().getAttributes().width = MainActivity.dialogWidth;
getWindow().getAttributes().height = MainActivity.dialogHeight;
}
/**
* Function that load theme
*
* @param ctx
* @return
*/
private static int checkTheme(Context ctx) {
TypedArray atts = ctx.getTheme().obtainStyledAttributes(
new int[] { R.attr.A4TVDialog });
int i = atts.getResourceId(0, 0);
atts.recycle();
return i;
}
/**
* This is called when a button is clicked
*/
@Override
public void onClick(View v) {
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
MainActivity.activity.getMainMenuHandler().closeMainMenu(false);
AccountsAndSyncAddAccountDialog.this.cancel();
AccountsAndSyncDialog asDialog = MainActivity.activity
.getDialogManager().getAccountsAndSyncDialog();
if (asDialog != null) {
asDialog.cancel();
}
try {
MainActivity.service.getSystemControl().getAccountSyncControl()
.addAccount(accounts.get(arg2));
} catch (Exception e) {
e.printStackTrace();
}
}
/** Adapter for list of accounts */
private class ManageAccountsAdapter extends BaseAdapter {
private final int LIST_ITEM_WEIGHT_SUM = 5, TEXT_WEIGHT = 4,
IMAGE_WEIGHT = 1;
@Override
public int getCount() {
return accounts.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = new LinearLayout(ctx);
holder = new ViewHolder();
holder.textView = new A4TVTextView(ctx);
holder.image = new ImageView(ctx);
((LinearLayout) convertView).addView(holder.image);
((LinearLayout) convertView).addView(holder.textView);
((LinearLayout) convertView)
.setOrientation(LinearLayout.HORIZONTAL);
((LinearLayout) convertView)
.setGravity(Gravity.CENTER_VERTICAL);
((LinearLayout) convertView).setWeightSum(LIST_ITEM_WEIGHT_SUM);
convertView.setLayoutParams(new ListView.LayoutParams(
LayoutParams.MATCH_PARENT,
MainActivity.dialogListElementHeight));
convertView
.setBackgroundResource(R.drawable.list_view_selector);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
setRow(holder, position);
return convertView;
}
/** Function that connects list views child with view holder */
private void setRow(ViewHolder holder, int position) {
holder.textView.setText(accounts.get(position).getAccountLabel());
holder.textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
holder.textView.setPadding(
(int) ctx.getResources()
.getDimension(R.dimen.padding_large), 0, 0, 0);
try {
Bitmap bmp = BitmapFactory.decodeByteArray(
accounts.get(position).getImage(), 0,
accounts.get(position).getImage().length);
if (bmp != null) {
holder.image.setImageBitmap(bmp);
}
} catch (Exception e) {
e.printStackTrace();
}
holder.image.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.WRAP_CONTENT, IMAGE_WEIGHT));
holder.textView.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.WRAP_CONTENT, TEXT_WEIGHT));
}
private class ViewHolder {
ImageView image;
TextView textView;
}
}
@Override
public void returnArrayListsWithDialogContents(
ArrayList<ArrayList<Integer>> contentList,
ArrayList<ArrayList<Integer>> contentListIDs,
ArrayList<Integer> titleIDs) {
// clear old data in lists
contentList.clear();
contentListIDs.clear();
titleIDs.clear();
// title
titleIDs.add(R.drawable.settings_icon);
titleIDs.add(R.drawable.account_sync);
titleIDs.add(R.string.tv_menu_account_settings_add_account);
}
}