ContactsBadge: When there is no data to display, show it to the user
instead of showing an empty badge
To test:
Create an empty Contact (only with a name), and click the Android symbol
on the Contact.
old Version: Empty Badge
new Version: TextView showing "No data"
Change-Id: I28e65b6de689af69d0b6a327c5bea9ab711d0691
diff --git a/res/layout-finger/quickcontact_item_nodata.xml b/res/layout-finger/quickcontact_item_nodata.xml
new file mode 100644
index 0000000..5215e30
--- /dev/null
+++ b/res/layout-finger/quickcontact_item_nodata.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="12dip"
+ android:paddingRight="12dip"
+ android:scaleType="centerInside"
+ android:focusable="false"
+ android:clickable="false"
+ android:gravity="center_vertical"
+ android:background="@drawable/quickcontact_slider_btn_normal"
+ android:textColor="@android:color/black"
+ android:text="@string/quickcontact_no_data" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 31e64c3..893394c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -458,7 +458,7 @@
</string>
<!-- Activity title for the activity that lets the user choose which groups of contacts to sync from the server -->
-
+
<!-- Live folder label for all contacts -->
<string name="liveFolder_all_label">All contacts</string>
@@ -836,6 +836,9 @@
<!-- Shown as the header name for a person when the name is missing or unknown. -->
<string name="quickcontact_missing_name">Unknown</string>
+ <!-- Text that is shown in the Badge, when there is no data to display -->
+ <string name="quickcontact_no_data">No data</string>
+
<!-- The menu item to open the list of accounts -->
<string name="menu_accounts">Accounts</string>
@@ -1081,28 +1084,28 @@
<!-- Text describing that a contact has no information available other than name and photo -->
<string name="no_contact_details">No additional information for this contact</string>
-
+
<!-- Label of the "sort list by" display option -->
<string name="display_options_sort_list_by">Sort list by</string>
-
+
<!-- An allowable value for the "sort list by" contact display option -->
<string name="display_options_sort_by_given_name">Given name</string>
-
+
<!-- An allowable value for the "sort list by" contact display option -->
<string name="display_options_sort_by_family_name">Family name</string>
-
+
<!-- Label of the "view names as" display option -->
<string name="display_options_view_names_as">View contact names as</string>
-
+
<!-- An allowable value for the "view names as" contact display option -->
<string name="display_options_view_given_name_first">Given name first</string>
-
+
<!-- An allowable value for the "view names as" contact display option -->
<string name="display_options_view_family_name_first">Family name first</string>
-
+
<!-- Gray hint displayed in the search field in Contacts when empty -->
<string name="search_bar_hint">Search contacts</string>
-
+
<!-- Button displayed underneath the list of filtered visible contacts -->
<string name="search_for_all_contacts">Search for all contacts</string>
@@ -1120,12 +1123,12 @@
<!-- Text shown in the contacts app if the background process updating contacts fails because of memory shortage -->
<string name="upgrade_out_of_memory">Contacts are in the process of being upgraded.
- \n\nThe upgrade process requires approximately <xliff:g id="size_in_megabytes">%d</xliff:g>Mb of
- internal phone storage.\n\nChoose one of the following options:</string>
-
+ \n\nThe upgrade process requires approximately <xliff:g id="size_in_megabytes">%d</xliff:g>
+ Mb of internal phone storage.\n\nChoose one of the following options:</string>
+
<!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage -->
<string name="upgrade_out_of_memory_uninstall">Uninstall some applications</string>
-
+
<!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage -->
<string name="upgrade_out_of_memory_retry">Retry upgrade</string>
diff --git a/src/com/android/contacts/ui/QuickContactWindow.java b/src/com/android/contacts/ui/QuickContactWindow.java
index 6fdcb01..20d5bfd 100644
--- a/src/com/android/contacts/ui/QuickContactWindow.java
+++ b/src/com/android/contacts/ui/QuickContactWindow.java
@@ -168,7 +168,6 @@
private int mRequestedY;
private boolean mHasValidSocial = false;
- private boolean mHasData = false;
private boolean mMakePrimary = false;
private ImageView mArrowUp;
@@ -599,7 +598,7 @@
* {@link #showInternal()} when all data items are present.
*/
private void considerShowing() {
- if (mHasData && !mShowing && !mDismissed) {
+ if (!mShowing && !mDismissed) {
if (mMode == QuickContact.MODE_MEDIUM && !mHasValidSocial) {
// Missing valid social, swap medium for small header
mHeader.setVisibility(View.GONE);
@@ -624,7 +623,6 @@
}
handleData(cursor);
- mHasData = true;
if (!cursor.isClosed()) {
cursor.close();
@@ -960,8 +958,8 @@
/** {@inheritDoc} */
public Intent getIntent() {
final Intent intent = new Intent(Intent.ACTION_VIEW, mLookupUri);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- return intent;
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ return intent;
}
/** {@inheritDoc} */
@@ -1258,9 +1256,12 @@
// All the mime-types to add.
final Set<String> containedTypes = new HashSet<String>(mActions.keySet());
+ boolean hasData = false;
+
// First, add PRECEDING_MIMETYPES, which are most common.
for (String mimeType : PRECEDING_MIMETYPES) {
if (containedTypes.contains(mimeType)) {
+ hasData = true;
mTrack.addView(inflateAction(mimeType), index++);
containedTypes.remove(mimeType);
}
@@ -1272,6 +1273,7 @@
// Then, add FOLLOWING_MIMETYPES, which are least common.
for (String mimeType : FOLLOWING_MIMETYPES) {
if (containedTypes.contains(mimeType)) {
+ hasData = true;
mTrack.addView(inflateAction(mimeType), index++);
containedTypes.remove(mimeType);
}
@@ -1280,10 +1282,17 @@
// Go back to just after PRECEDING_MIMETYPES, and append the rest.
index = indexAfterPreceding;
final String[] remainingTypes = containedTypes.toArray(new String[containedTypes.size()]);
+ if (remainingTypes.length > 0) hasData = true;
Arrays.sort(remainingTypes);
for (String mimeType : remainingTypes) {
mTrack.addView(inflateAction(mimeType), index++);
}
+
+ // When there is no data to display, add a TextView to show the user there's no data
+ if (!hasData) {
+ View view = mInflater.inflate(R.layout.quickcontact_item_nodata, mTrack, false);
+ mTrack.addView(view, index++);
+ }
}
/**
@@ -1316,6 +1325,10 @@
* possible recycling during another pass.
*/
private synchronized void releaseView(View view) {
+ // Only add CheckableImageViews
+ if (!(view instanceof CheckableImageView)) {
+ return;
+ }
mActionPool.offer(view);
mActionRecycled++;
}