Fix empty state layouts
Bug: 5074806 Fix empty state layouts
Bug: 5109507 During loading group, we show "no groups"
instead of "loading groups"
- Changed the layout of contacts_unavailable_fragment to Marco's specs.
- Added a secondary message for empty state.
- Aligned layouts of empty state of each specific fragment to match the
full empty state.
- Removed "No Groups" message when group list fragment is loading the
group list
Change-Id: I5cea254e5892955906127599374dc706d2aca91b
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 45ce4fe..2f13481 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -16,6 +16,8 @@
package com.android.contacts;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.AccountWithDataSet;
import com.android.i18n.phonenumbers.NumberParseException;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.i18n.phonenumbers.PhoneNumberUtil.MatchType;
@@ -29,6 +31,8 @@
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
+import java.util.List;
+
public class ContactsUtils {
private static final String TAG = "ContactsUtils";
private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
@@ -166,4 +170,12 @@
(CountryDetector) context.getSystemService(Context.COUNTRY_DETECTOR);
return detector.detectCountry().getCountryIso();
}
+
+ public static boolean areAccountsAvailable(Context context) {
+ final List<AccountWithDataSet> accounts =
+ AccountTypeManager.getInstance(context).getAccounts(true /* writeable */);
+ return !accounts.isEmpty();
+ }
+
+
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 1da1c97..b226ad1 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -19,6 +19,7 @@
import com.android.contacts.ContactLoader;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter.TabState;
import com.android.contacts.detail.ContactDetailFragment;
@@ -198,9 +199,7 @@
}
private boolean areAccountsAvailable() {
- final List<AccountWithDataSet> accounts =
- AccountTypeManager.getInstance(this).getAccounts(true /* writeable */);
- return !accounts.isEmpty();
+ return ContactsUtils.areAccountsAvailable(this);
}
@@ -677,13 +676,14 @@
switch (tab) {
case FAVORITES:
mContactsUnavailableFragment.setMessageText(
- R.string.listTotalAllContactsZeroStarred);
+ R.string.listTotalAllContactsZeroStarred, -1);
break;
case GROUPS:
- mContactsUnavailableFragment.setMessageText(R.string.noGroups);
+ mContactsUnavailableFragment.setMessageText(R.string.noGroups,
+ areAccountsAvailable() ? -1 : R.string.noAccounts);
break;
case ALL:
- mContactsUnavailableFragment.setMessageText(R.string.noContacts);
+ mContactsUnavailableFragment.setMessageText(R.string.noContacts, -1);
break;
}
}
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index aca638e..49835ef 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -16,6 +16,7 @@
package com.android.contacts.group;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.GroupListLoader;
import com.android.contacts.R;
import com.android.contacts.group.GroupBrowseListAdapter.GroupListItemViewCache;
@@ -47,6 +48,7 @@
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
+import android.widget.TextView;
/**
* Fragment to display the list of groups.
@@ -81,7 +83,7 @@
private View mRootView;
private AutoScrollListView mListView;
- private View mEmptyView;
+ private TextView mEmptyView;
private View mAddAccountsView;
private View mAddAccountButton;
@@ -100,7 +102,7 @@
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mRootView = inflater.inflate(R.layout.group_browse_list_fragment, null);
- mEmptyView = mRootView.findViewById(R.id.empty);
+ mEmptyView = (TextView)mRootView.findViewById(R.id.empty);
mAdapter = new GroupBrowseListAdapter(mContext);
mAdapter.setSelectionVisible(mSelectionVisible);
@@ -120,7 +122,7 @@
}
});
- mEmptyView = mRootView.findViewById(R.id.empty);
+ mListView.setEmptyView(mEmptyView);
mAddAccountsView = mRootView.findViewById(R.id.add_accounts);
mAddAccountButton = mRootView.findViewById(R.id.add_account_button);
mAddAccountButton.setOnClickListener(new OnClickListener() {
@@ -133,7 +135,7 @@
startActivity(intent);
}
});
- setAddAccountsVisibility(false);
+ setAddAccountsVisibility(!ContactsUtils.areAccountsAvailable(mContext));
if (savedInstanceState != null) {
String groupUriString = savedInstanceState.getString(EXTRA_KEY_GROUP_URI);
@@ -193,6 +195,7 @@
@Override
public CursorLoader onCreateLoader(int id, Bundle args) {
+ mEmptyView.setText(null);
return new GroupListLoader(mContext);
}
@@ -207,6 +210,8 @@
};
private void bindGroupList() {
+ mEmptyView.setText(R.string.noGroups);
+ setAddAccountsVisibility(!ContactsUtils.areAccountsAvailable(mContext));
if (mGroupListCursor == null) {
return;
}
@@ -219,7 +224,6 @@
// Restore the scroll position.
mListView.onRestoreInstanceState(listState);
}
- mListView.setEmptyView(mEmptyView);
mSelectedGroupUri = mAdapter.getSelectedGroup();
if (mSelectionVisible && mSelectedGroupUri != null) {
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 3bab3fd..74a578f 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -39,6 +39,7 @@
private View mView;
private TextView mMessageView;
+ private TextView mSecondaryMessageView;
private Button mCreateContactButton;
private Button mAddAccountButton;
private Button mImportContactsButton;
@@ -46,6 +47,7 @@
private Button mRetryUpgradeButton;
private ProgressBar mProgress;
private int mNoContactsMsgResId = -1;
+ private int mNSecNoContactsMsgResId = -1;
private OnContactsUnavailableActionListener mListener;
@@ -54,6 +56,7 @@
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null);
mMessageView = (TextView) mView.findViewById(R.id.message);
+ mSecondaryMessageView = (TextView) mView.findViewById(R.id.secondary_message);
mCreateContactButton = (Button) mView.findViewById(R.id.create_contact_button);
mCreateContactButton.setOnClickListener(this);
mAddAccountButton = (Button) mView.findViewById(R.id.add_account_button);
@@ -82,14 +85,7 @@
int providerStatus = mProviderStatusLoader.getProviderStatus();
switch (providerStatus) {
case ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS:
- if (mNoContactsMsgResId != -1) {
- mMessageView.setText(mNoContactsMsgResId);
- mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
- mMessageView.setVisibility(View.VISIBLE);
- } else {
- mMessageView.setGravity(Gravity.LEFT);
- mMessageView.setVisibility(View.GONE);
- }
+ setMessageText(mNoContactsMsgResId, mNSecNoContactsMsgResId);
mCreateContactButton.setVisibility(View.VISIBLE);
mAddAccountButton.setVisibility(View.VISIBLE);
mImportContactsButton.setVisibility(View.VISIBLE);
@@ -162,18 +158,31 @@
}
}
/**
- * Set the message to be shown if data is available for the selected tab
+ * Set the message to be shown if no data is available for the selected tab
*
- * @param resId - String resource ID of the message
+ * @param resId - String resource ID of the message , -1 means view will not be visible
*/
- public void setMessageText(int resId) {
+ public void setMessageText(int resId, int secResId) {
mNoContactsMsgResId = resId;
+ mNSecNoContactsMsgResId = secResId;
if (mMessageView != null &&
mProviderStatusLoader.getProviderStatus() ==
ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) {
- mMessageView.setText(mNoContactsMsgResId);
- mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
- mMessageView.setVisibility(View.VISIBLE);
+ if (resId != -1) {
+ mMessageView.setText(mNoContactsMsgResId);
+ mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
+ mMessageView.setVisibility(View.VISIBLE);
+ if (secResId != -1) {
+ mSecondaryMessageView.setText(mNSecNoContactsMsgResId);
+ mSecondaryMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
+ mSecondaryMessageView.setVisibility(View.VISIBLE);
+ } else {
+ mSecondaryMessageView.setVisibility(View.INVISIBLE);
+ }
+ } else {
+ mSecondaryMessageView.setVisibility(View.GONE);
+ mMessageView.setVisibility(View.GONE);
+ }
}
}
}