Move "Add Account" to ActionBar

Not currently enabling/disabling properly, filing a framework bug.

Bug: 3188951
Change-Id: I9c8900187048f548411a23c2a1b0208c79fc0a24
This commit is contained in:
Andy Stadler 2010-11-29 15:00:37 -08:00
parent ac25a48d7b
commit 97874770fc
2 changed files with 51 additions and 20 deletions

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- A menu for Account Settings to provide the "Add Account" option -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_new_account"
android:title="@string/add_account_action"
android:icon="@android:drawable/ic_menu_add"
android:showAsAction="ifRoom|withText"
/>
</menu>

View File

@ -42,6 +42,8 @@ import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
@ -65,7 +67,7 @@ import java.util.List;
* sense to use a loader for the accounts list, because it would provide better support for
* dealing with accounts being added/deleted and triggering the header reload.
*/
public class AccountSettingsXL extends PreferenceActivity implements OnClickListener {
public class AccountSettingsXL extends PreferenceActivity {
// Intent extras for our internal activity launch
/* package */ static final String EXTRA_ACCOUNT_ID = "AccountSettingsXL.account_id";
@ -100,7 +102,6 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
/* package */ Fragment mCurrentFragment;
private long mDeletingAccountId = -1;
private boolean mShowDebugMenu;
private Button mAddAccountButton;
private List<Header> mGeneratedHeaders;
// Async Tasks
@ -162,17 +163,6 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
}
}
mShowDebugMenu = i.getBooleanExtra(EXTRA_ENABLE_DEBUG, false);
// Add Account as header list footer
// TODO: This probably should be some sort of themed layout with a button in it
if (hasHeaders()) {
mAddAccountButton = new Button(this);
mAddAccountButton.setText(R.string.add_account_action);
mAddAccountButton.setOnClickListener(this);
mAddAccountButton.setEnabled(false);
setListFooter(mAddAccountButton);
}
}
@Override
@ -181,8 +171,8 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
updateAccounts();
// When we're resuming, enable/disable the add account button
if (mAddAccountButton != null && hasHeaders()) {
mAddAccountButton.setEnabled(shouldShowNewAccount());
if (hasHeaders()) {
invalidateOptionsMenu();
}
}
@ -213,10 +203,27 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
}
@Override
public void onClick(View v) {
if (v == mAddAccountButton) {
onAddNewAccount();
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.account_settings_add_account_option, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return shouldShowNewAccount();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_new_account:
onAddNewAccount();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
/**
@ -455,8 +462,8 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
}
// When we're changing fragments, enable/disable the add account button
if (mAddAccountButton != null && hasHeaders()) {
mAddAccountButton.setEnabled(shouldShowNewAccount());
if (hasHeaders()) {
invalidateOptionsMenu();
}
}