# HG changeset patch # User Vincent Veronis # Date 1314045680 -7200 # Node ID 1f83dfed461c0c5bc1991a67fed5bd9fb418b5e9 # Parent 6545a0ce9b3a980b72dbd08a08933e905cf69019 LongClick on login logo to update account status diff -r 6545a0ce9b3a -r 1f83dfed461c src/com/beem/project/beem/ui/Login.java --- a/src/com/beem/project/beem/ui/Login.java Mon Aug 22 00:22:12 2011 +0200 +++ b/src/com/beem/project/beem/ui/Login.java Mon Aug 22 22:41:20 2011 +0200 @@ -1,44 +1,44 @@ /* - BEEM is a videoconference application on the Android Platform. + BEEM is a videoconference application on the Android Platform. - Copyright (C) 2009 by Frederic-Charles Barthelery, - Jean-Manuel Da Silva, - Nikita Kozlov, - Philippe Lago, - Jean Baptiste Vergely, - Vincent Veronis. + Copyright (C) 2009 by Frederic-Charles Barthelery, + Jean-Manuel Da Silva, + Nikita Kozlov, + Philippe Lago, + Jean Baptiste Vergely, + Vincent Veronis. - This file is part of BEEM. + This file is part of BEEM. - BEEM 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. + BEEM 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. - BEEM 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. + BEEM 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 BEEM. If not, see . + You should have received a copy of the GNU General Public License + along with BEEM. If not, see . - Please send bug reports with examples or suggestions to - contact@beem-project.com or http://dev.beem-project.com/ + Please send bug reports with examples or suggestions to + contact@beem-project.com or http://dev.beem-project.com/ - Epitech, hereby disclaims all copyright interest in the program "Beem" - written by Frederic-Charles Barthelery, - Jean-Manuel Da Silva, - Nikita Kozlov, - Philippe Lago, - Jean Baptiste Vergely, - Vincent Veronis. + Epitech, hereby disclaims all copyright interest in the program "Beem" + written by Frederic-Charles Barthelery, + Jean-Manuel Da Silva, + Nikita Kozlov, + Philippe Lago, + Jean Baptiste Vergely, + Vincent Veronis. - Nicolas Sadirac, November 26, 2009 - President of Epitech. + Nicolas Sadirac, November 26, 2009 + President of Epitech. - Flavien Astraud, November 26, 2009 - Head of the EIP Laboratory. + Flavien Astraud, November 26, 2009 + Head of the EIP Laboratory. */ package com.beem.project.beem.ui; @@ -46,6 +46,7 @@ import java.util.ArrayList; import java.util.List; +import android.util.Log; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; @@ -81,232 +82,257 @@ */ public class Login extends Activity { - private BeemAccountList mAdapterAccountList; - private List mListAccount = new ArrayList(); - private final BeemAccountListOnClick mOnAccountClick = new BeemAccountListOnClick(); - private final BroadcastReceiver mOnBroadcastReceiver = new BeemBroadcastReceiver(); - - /** - * Constructor. - */ - public Login() { - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.login); - ListView listView = (ListView) findViewById(R.id.accountlist); - mAdapterAccountList = new BeemAccountList(getLayoutInflater()); - listView.setClickable(true); - listView.setOnItemClickListener(mOnAccountClick); - listView.setAdapter(mAdapterAccountList); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.login, menu); - return true; - } - - @Override - public final boolean onOptionsItemSelected(MenuItem item) { - boolean result; - switch (item.getItemId()) { - case R.id.login_menu_settings: - startActivity(new Intent(Login.this, Settings.class)); - result = true; - break; - case R.id.login_menu_about: - createAboutDialog(); - result = true; - break; - case R.id.login_menu_login: - result = true; - break; - default: - result = false; - break; - } - return result; - } - - /** - * Create an about "BEEM" dialog. - */ - private void createAboutDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - String versionname; - try { - PackageManager pm = getPackageManager(); - PackageInfo pi = pm.getPackageInfo("com.beem.project.beem", 0); - versionname = pi.versionName; - } catch (PackageManager.NameNotFoundException e) { - versionname = ""; - } - String title = getString(R.string.login_about_title, versionname); - builder.setTitle(title).setMessage(R.string.login_about_msg).setCancelable(false); - builder.setNeutralButton(R.string.login_about_button, new DialogInterface.OnClickListener() { - - public void onClick(DialogInterface dialog, int whichButton) { - dialog.cancel(); - } - }); - AlertDialog aboutDialog = builder.create(); - aboutDialog.show(); - } - - /** - * Populate row account. - */ - private class BeemAccountList extends BaseAdapter { - - private LayoutInflater mInflater; - - public BeemAccountList(LayoutInflater layoutInflater) { - mInflater = layoutInflater; - AccountManager am = AccountManager.get(Login.this); - Account allAccount[] = am.getAccountsByType("com.beem.project.com"); - for (Account account : allAccount) { - mListAccount.add(account.name); - } - } - - @Override - public int getCount() { - return mListAccount.size(); - } - - @Override - public Object getItem(int position) { - return mListAccount.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - if (convertView == null) { - v = mInflater.inflate(R.layout.login_row_account, null); - } - ImageButton logo = (ImageButton) v.findViewById(R.id.loginanim_logo_anim); - logo.setFocusable(false); - logo.setOnClickListener(new BeemConnectionOnClick(v)); - TextView name = (TextView) v.findViewById(R.id.accountname); - name.setText(mListAccount.get(position)); - int hash = mListAccount.get(position).hashCode(); - if (hash < 0) - hash = hash - 2 * hash; - v.setId(hash); - return v; - } - - } - - /** - * Event simple click on item of the button of account list. - */ - private class BeemConnectionOnClick implements android.view.View.OnClickListener { - private View mView; + private BeemAccountList mAdapterAccountList; + private List mListAccount = new ArrayList(); + private final BeemAccountListOnClick mOnAccountClick = new BeemAccountListOnClick(); + private final BroadcastReceiver mOnBroadcastReceiver = new BeemBroadcastReceiver(); /** * Constructor. */ - public BeemConnectionOnClick(View v) { - mView = v; + public Login() { } @Override - public void onClick(View v) { - //TODO: Check if already connected -> disconnect - TextView accountStatus = (TextView) mView.findViewById(R.id.accountstatus); - accountStatus.setText(R.string.login_pending); + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.login); + ListView listView = (ListView) findViewById(R.id.accountlist); + mAdapterAccountList = new BeemAccountList(getLayoutInflater()); + listView.setClickable(true); + listView.setOnItemClickListener(mOnAccountClick); + listView.setAdapter(mAdapterAccountList); + } - ImageButton logo = (ImageButton) mView.findViewById(R.id.loginanim_logo_anim); - logo.startAnimation(AnimationUtils.loadAnimation(mView.getContext(), R.anim.rotate_and_scale)); + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.login, menu); + return true; + } - TextView accountName = (TextView) mView.findViewById(R.id.accountname); - Intent intent = new Intent(BeemIntent.ACTION_CONNECT); - intent.putExtra(BeemIntent.EXTRA_ACCOUNT, accountName.getText()); - IntentFilter filter = new IntentFilter(BeemIntent.ACTION_CONNECTED); - filter.addAction(BeemIntent.ACTION_DISCONNECTED); - registerReceiver(mOnBroadcastReceiver, filter); - startService(intent); - } - } + @Override + public final boolean onOptionsItemSelected(MenuItem item) { + boolean result; + switch (item.getItemId()) { + case R.id.login_menu_settings: + startActivity(new Intent(Login.this, Settings.class)); + result = true; + break; + case R.id.login_menu_about: + createAboutDialog(); + result = true; + break; + case R.id.login_menu_login: + result = true; + break; + default: + result = false; + break; + } + return result; + } - /** - * Event simple click on item of the account list. - */ - private class BeemAccountListOnClick implements OnItemClickListener { /** - * Constructor. + * Create an about "BEEM" dialog. */ - public BeemAccountListOnClick() { + private void createAboutDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + String versionname; + try { + PackageManager pm = getPackageManager(); + PackageInfo pi = pm.getPackageInfo("com.beem.project.beem", 0); + versionname = pi.versionName; + } catch (PackageManager.NameNotFoundException e) { + versionname = ""; + } + String title = getString(R.string.login_about_title, versionname); + builder.setTitle(title).setMessage(R.string.login_about_msg).setCancelable(false); + builder.setNeutralButton(R.string.login_about_button, new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int whichButton) { + dialog.cancel(); + } + }); + AlertDialog aboutDialog = builder.create(); + aboutDialog.show(); } /** - * {@inheritDoc} + * Populate row account. */ - @Override - public void onItemClick(AdapterView arg0, View v, int pos, long lpos) { - Intent i = new Intent(Login.this, ContactList.class); - TextView accountName = (TextView) v.findViewById(R.id.accountname); - i.putExtra(BeemIntent.EXTRA_ACCOUNT, accountName.getText()); - startActivity(i); - } - } + private class BeemAccountList extends BaseAdapter { + + private LayoutInflater mInflater; + + public BeemAccountList(LayoutInflater layoutInflater) { + mInflater = layoutInflater; + AccountManager am = AccountManager.get(Login.this); + Account allAccount[] = am.getAccountsByType("com.beem.project.com"); + for (Account account : allAccount) { + mListAccount.add(account.name); + } + } + + @Override + public int getCount() { + return mListAccount.size(); + } + + @Override + public Object getItem(int position) { + return mListAccount.get(position); + } - /** - * Event receive from service. - */ - private class BeemBroadcastReceiver extends BroadcastReceiver { + @Override + public long getItemId(int position) { + return position; + } - /** - * Constructor. - */ - public BeemBroadcastReceiver() { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = convertView; + if (convertView == null) { + v = mInflater.inflate(R.layout.login_row_account, null); + } + ImageButton logo = (ImageButton) v.findViewById(R.id.loginanim_logo_anim); + logo.setFocusable(false); + logo.setOnClickListener(new BeemConnectionOnClick(v)); + logo.setOnLongClickListener(new BeemConnectionOnLongClick(v)); + TextView name = (TextView) v.findViewById(R.id.accountname); + name.setText(mListAccount.get(position)); + int hash = mListAccount.get(position).hashCode(); + if (hash < 0) + hash = hash * -1; + v.setId(hash); + return v; + } } /** - * {@inheritDoc} + * Event simple click on item of the button of account list. */ - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - String account = intent.getExtras().getString(BeemIntent.EXTRA_ACCOUNT); - int hash = account.hashCode(); - if (hash < 0) - hash = hash - 2 * hash; + private class BeemConnectionOnClick implements android.view.View.OnClickListener { + private View mView; - View v = findViewById(hash); - TextView text = (TextView) v.findViewById(R.id.accountstatus); - ImageButton logo = (ImageButton) v.findViewById(R.id.loginanim_logo_anim); + /** + * Constructor. + */ + public BeemConnectionOnClick(View v) { + mView = v; + } + + @Override + public void onClick(View v) { + //TODO: Check if already connected -> disconnect + TextView accountStatus = (TextView) mView.findViewById(R.id.accountstatus); + accountStatus.setText(R.string.login_pending); + + ImageButton logo = (ImageButton) mView.findViewById(R.id.loginanim_logo_anim); + logo.startAnimation(AnimationUtils.loadAnimation(mView.getContext(), R.anim.rotate_and_scale)); - if (BeemIntent.ACTION_CONNECTED.equals(action)) { - if (text != null) - text.setText(R.string.contact_status_msg_available); - if (logo != null) { - logo.setImageResource(R.drawable.beem_launcher_icon_color); - logo.clearAnimation(); + TextView accountName = (TextView) mView.findViewById(R.id.accountname); + Intent intent = new Intent(BeemIntent.ACTION_CONNECT); + intent.putExtra(BeemIntent.EXTRA_ACCOUNT, accountName.getText()); + IntentFilter filter = new IntentFilter(BeemIntent.ACTION_CONNECTED); + filter.addAction(BeemIntent.ACTION_DISCONNECTED); + registerReceiver(mOnBroadcastReceiver, filter); + startService(intent); + } + } + + /** + * Event simple long click on item of the button of account list. + */ + private class BeemConnectionOnLongClick implements android.view.View.OnLongClickListener { + private View mView; + + /** + * Constructor. + */ + public BeemConnectionOnLongClick(View v) { + mView = v; } - } else if (BeemIntent.ACTION_DISCONNECTED.equals(action)) { - String message = intent.getExtras().getString(BeemIntent.EXTRA_MESSAGE); - if (text != null) - text.setText(message); - if (logo != null) { - logo.setImageResource(R.drawable.beem_launcher_icon_silver); - logo.clearAnimation(); - } - } + + @Override + public boolean onLongClick(View v) { + TextView accountName = (TextView) mView.findViewById(R.id.accountname); + Intent i = new Intent(Login.this, ChangeStatus.class); + i.putExtra("beem_account", accountName.getText()); + startActivity(i); + return true; + } } - } + + /** + * Event simple click on item of the account list. + */ + private class BeemAccountListOnClick implements OnItemClickListener { + /** + * Constructor. + */ + public BeemAccountListOnClick() { + } + + /** + * {@inheritDoc} + */ + @Override + public void onItemClick(AdapterView arg0, View v, int pos, long lpos) { + Intent i = new Intent(Login.this, ContactList.class); + TextView accountName = (TextView) v.findViewById(R.id.accountname); + i.putExtra(BeemIntent.EXTRA_ACCOUNT, accountName.getText()); + startActivity(i); + } + } + + /** + * Event receive from service. + */ + private class BeemBroadcastReceiver extends BroadcastReceiver { + + /** + * Constructor. + */ + public BeemBroadcastReceiver() { + + } + + /** + * {@inheritDoc} + */ + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + String account = intent.getExtras().getString(BeemIntent.EXTRA_ACCOUNT); + int hash = account.hashCode(); + if (hash < 0) + hash = hash * -1; + + View v = findViewById(hash); + TextView text = (TextView) v.findViewById(R.id.accountstatus); + ImageButton logo = (ImageButton) v.findViewById(R.id.loginanim_logo_anim); + + if (BeemIntent.ACTION_CONNECTED.equals(action)) { + if (text != null) + text.setText(R.string.contact_status_msg_available); + if (logo != null) { + logo.setImageResource(R.drawable.beem_launcher_icon_color); + logo.clearAnimation(); + } + } else if (BeemIntent.ACTION_DISCONNECTED.equals(action)) { + String message = intent.getExtras().getString(BeemIntent.EXTRA_MESSAGE); + if (text != null) + text.setText(message); + if (logo != null) { + logo.setImageResource(R.drawable.beem_launcher_icon_silver); + logo.clearAnimation(); + } + } + } + + } }