package com.nuscomputing.ivle; import android.accounts.Account; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.SpinnerAdapter; import android.widget.TextView; /** * Account settings activity. * Allows users to view and update account settings for NUS IVLE. * @author yjwong */ @TargetApi(11) public class AccountSettingsActivity extends Activity { // {{{ properties /** TAG for logging */ public static final String TAG = "AccountSettingsActivity"; /** The action bar */ private ActionBar mActionBar; // }}} // {{{ methods /** Called when the activity is first created. */ @TargetApi(14) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.account_settings_activity); // Set title for action bar. mActionBar = getActionBar(); mActionBar.setTitle(getString(R.string.account_settings_activity_account_settings)); // Jellybean now removes per-account settings. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { // Obtain all the accounts. final Account[] accounts = AccountUtils.getAllAccounts(this); ArrayAdapter<Account> adapter = new AccountsSpinnerAdapter(mActionBar.getThemedContext(), android.R.id.text1, accounts); // Use a spinner action bar. mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); mActionBar.setDisplayShowTitleEnabled(false); mActionBar.setListNavigationCallbacks(adapter, new ActionBar.OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // Set the subtitle. mActionBar.setSubtitle(accounts[itemPosition].name); // Create a fragment. Bundle args = new Bundle(); args.putParcelable("account", accounts[itemPosition]); Fragment fragment = new AccountSettingsFragment(); fragment.setArguments(args); // Replace the fragment. FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.account_settings_activity_fragment_container, fragment); transaction.commit(); return true; } }); } else { // Obtain the account we want. Intent intent = getIntent(); Account account = intent.getParcelableExtra("account"); // Set title for action bar. mActionBar.setSubtitle(account.name); // Get hold of the fragment and set the argument. Fragment fragment = new AccountSettingsFragment(); fragment.setArguments(intent.getExtras()); // Insert the fragment. FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.account_settings_activity_fragment_container, fragment, null); transaction.commit(); } } @Override public void onSaveInstanceState(Bundle outState) { // Jellybean: save the fragment we're on. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { outState.putInt("position", mActionBar.getSelectedNavigationIndex()); } } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { // Jellybean: restore the fragment we're on. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { int barPosition = savedInstanceState.getInt("position", 0); mActionBar.setSelectedNavigationItem(barPosition); } } // }}} // {{{ classes /** * An adapter for the spinner accounts. * @author yjwong */ class AccountsSpinnerAdapter extends ArrayAdapter<Account> implements SpinnerAdapter { // {{{ properties /** The context */ private Context mContext; /** The list of accounts */ private Account[] mAccounts; /** The layout inflater */ private LayoutInflater mLayoutInflater; // }}} // {{{ methods AccountsSpinnerAdapter(Context context, int textViewResourceId, Account[] accounts) { super(context, textViewResourceId, accounts); mContext = context; mAccounts = accounts; // Get the layout inflater. mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent) { // View for the spinner. convertView = mLayoutInflater.inflate(R.layout.account_settings_activity_spinner, null); // Insert the title. TextView tvTitle = (TextView) convertView.findViewById(R.id.account_settings_activity_spinner_title); tvTitle.setText(mActionBar.getTitle()); // Insert the subtitle. TextView tvSubtitle = (TextView) convertView.findViewById(R.id.account_settings_activity_spinner_subtitle); tvSubtitle.setText(mAccounts[position].name); return convertView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { // Create a view to contain the name of the account. convertView = mLayoutInflater.inflate(android.R.layout.simple_list_item_1, null); // Insert the name. TextView tvAccountName = (TextView) convertView.findViewById(android.R.id.text1); tvAccountName.setText(mAccounts[position].name); return convertView; } // }}} } // }}} }