Merge "Avoid Resources$NotFoundException" into lmp-mr1-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 54fce69..50e398c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -221,7 +221,7 @@
<activity
android:name=".activities.ShowOrCreateActivity"
android:label="@string/launcherActivityLabel"
- android:theme="@android:style/Theme.Translucent.NoTitleBar">
+ android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
<intent-filter>
<action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
diff --git a/res/layout/quickcontact_header.xml b/res/layout/quickcontact_header.xml
index 37672c7..010146b 100644
--- a/res/layout/quickcontact_header.xml
+++ b/res/layout/quickcontact_header.xml
@@ -47,7 +47,8 @@
this view, instead of another. This will *not* cause an additional draw since the
background is transparent.-->
<Toolbar
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_gravity="end|top"
android:layout_height="?android:attr/actionBarSize"
android:background="#00000000"
android:id="@+id/toolbar"/>
diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
index e3fa7e2..a1ff6d9 100644
--- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
+++ b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
@@ -58,6 +58,7 @@
import android.widget.TextView;
import android.widget.Toast;
+import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
import com.android.contacts.editor.Editor;
import com.android.contacts.editor.EditorUiUtils;
@@ -102,7 +103,7 @@
* Note when there's no accounts, it *is* okay to show the picker / dialog, because the local-only
* contacts are writable.
*/
-public class ConfirmAddDetailActivity extends Activity implements
+public class ConfirmAddDetailActivity extends ContactsActivity implements
DialogManager.DialogShowingViewActivity {
private static final String TAG = "ConfirmAdd"; // The class name is too long to be a tag.
diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
index bf3b1c1..197d3bd 100644
--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
@@ -28,6 +28,7 @@
import android.widget.ListView;
import android.widget.TextView;
+import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
import com.android.contacts.editor.ContactEditorUtils;
import com.android.contacts.common.model.AccountTypeManager;
@@ -45,7 +46,7 @@
* the new contact in. If the activity result doesn't contain intent data, then there is no
* account for this contact.
*/
-public class ContactEditorAccountsChangedActivity extends Activity {
+public class ContactEditorAccountsChangedActivity extends ContactsActivity {
private static final String TAG = ContactEditorAccountsChangedActivity.class.getSimpleName();
diff --git a/src/com/android/contacts/activities/PhotoSelectionActivity.java b/src/com/android/contacts/activities/PhotoSelectionActivity.java
index da0d2e4..a773f11 100644
--- a/src/com/android/contacts/activities/PhotoSelectionActivity.java
+++ b/src/com/android/contacts/activities/PhotoSelectionActivity.java
@@ -19,7 +19,6 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
@@ -33,6 +32,7 @@
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView;
+import com.android.contacts.ContactsActivity;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.ContactSaveService;
import com.android.contacts.R;
@@ -44,7 +44,7 @@
/**
* Popup activity for choosing a contact photo within the Contacts app.
*/
-public class PhotoSelectionActivity extends Activity {
+public class PhotoSelectionActivity extends ContactsActivity {
private static final String TAG = "PhotoSelectionActivity";
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index abf89b6..0489065 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -213,7 +213,7 @@
final CharSequence message = getResources().getString(
R.string.add_contact_dlg_message_fmt, mCreateDescrip);
- return new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)
+ return new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new IntentClickListener(this, createIntent))
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index ed2520d..a2e32c9 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -93,6 +93,8 @@
import com.android.contacts.util.HelpUtils;
import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.UiClosables;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
+
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -102,7 +104,7 @@
import java.util.Comparator;
import java.util.List;
-public class ContactEditorFragment extends Fragment implements
+public class ContactEditorFragment extends AnalyticsFragment implements
SplitContactConfirmationDialogFragment.Listener,
AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
RawContactReadOnlyEditorView.Listener {
diff --git a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
index c790e0b..423052e 100644
--- a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
@@ -24,6 +24,7 @@
import android.os.Bundle;
import com.android.contacts.R;
+import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
/**
* Shows a dialog asking the user whether to split the contact. The result is passed back
@@ -31,7 +32,7 @@
* has to implement {@link SplitContactConfirmationDialogFragment.Listener}.
* Does not split the contact itself.
*/
-public class SplitContactConfirmationDialogFragment extends DialogFragment {
+public class SplitContactConfirmationDialogFragment extends AnalyticsDialogFragment {
public static final String TAG = "SplitContactConfirmationDialog";
public SplitContactConfirmationDialogFragment() {
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
index 81cc28c..e511d52 100644
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ b/src/com/android/contacts/group/GroupBrowseListFragment.java
@@ -47,11 +47,12 @@
import com.android.contacts.group.GroupBrowseListAdapter.GroupListItemViewCache;
import com.android.contacts.common.ContactsUtils;
import com.android.contacts.common.list.AutoScrollListView;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
/**
* Fragment to display the list of groups.
*/
-public class GroupBrowseListFragment extends Fragment
+public class GroupBrowseListFragment extends AnalyticsFragment
implements OnFocusChangeListener, OnTouchListener {
/**
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index c12595d..b8f8975 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -57,11 +57,12 @@
import com.android.contacts.list.GroupMemberTileAdapter;
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
/**
* Displays the details of a group and shows a list of actions possible for the group.
*/
-public class GroupDetailFragment extends Fragment implements OnScrollListener {
+public class GroupDetailFragment extends AnalyticsFragment implements OnScrollListener {
public static interface Listener {
/**
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index 3d13bdd..1b91ab8 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -72,13 +72,15 @@
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
import com.android.contacts.common.util.ViewUtil;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
import com.google.common.base.Objects;
import java.util.ArrayList;
import java.util.List;
-public class GroupEditorFragment extends Fragment implements SelectAccountDialogFragment.Listener {
+public class GroupEditorFragment extends AnalyticsFragment
+ implements SelectAccountDialogFragment.Listener {
private static final String TAG = "GroupEditorFragment";
private static final String LEGACY_CONTACTS_AUTHORITY = "contacts";
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index 2df7fe2..7925ac0 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -17,18 +17,18 @@
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.os.Bundle;
import com.android.contacts.ContactSaveService;
import com.android.contacts.R;
+import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
/**
* A dialog for deleting a group.
*/
-public class GroupDeletionDialogFragment extends DialogFragment {
+public class GroupDeletionDialogFragment extends AnalyticsDialogFragment {
private static final String ARG_GROUP_ID = "groupId";
private static final String ARG_LABEL = "label";
diff --git a/src/com/android/contacts/interactions/GroupNameDialogFragment.java b/src/com/android/contacts/interactions/GroupNameDialogFragment.java
index b0ad9c9..8059fd4 100644
--- a/src/com/android/contacts/interactions/GroupNameDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupNameDialogFragment.java
@@ -31,11 +31,12 @@
import android.widget.EditText;
import com.android.contacts.R;
+import com.android.contacts.commonbind.analytics.AnalyticsDialogFragment;
/**
* A common superclass for creating and renaming groups.
*/
-public abstract class GroupNameDialogFragment extends DialogFragment {
+public abstract class GroupNameDialogFragment extends AnalyticsDialogFragment {
protected abstract int getTitleResourceId();
protected abstract void initializeGroupLabelEditText(EditText editText);
protected abstract void onCompleted(String groupLabel);
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index 189cfd3..77c22e0 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -39,7 +39,7 @@
import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
import com.android.contacts.common.list.ContactTileView;
import com.android.contacts.common.util.ContactListViewUtils;
-import com.android.contacts.common.util.SchedulingUtils;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
/**
* Fragment containing a list of starred contacts followed by a list of frequently contacted.
@@ -49,7 +49,7 @@
* (i.e. adding header views to the ListViews in the fragment). This work was started
* by creating {@link ContactTileFrequentFragment}.
*/
-public class ContactTileListFragment extends Fragment {
+public class ContactTileListFragment extends AnalyticsFragment {
private static final String TAG = ContactTileListFragment.class.getSimpleName();
public interface Listener {
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 70d224a..46f2138 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.contacts.list;
-import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.provider.ContactsContract.ProviderStatus;
@@ -29,12 +28,13 @@
import android.widget.TextView;
import com.android.contacts.R;
+import com.android.contacts.commonbind.analytics.AnalyticsFragment;
/**
* Fragment shown when contacts are unavailable. It contains provider status
* messaging as well as instructions for the user.
*/
-public class ContactsUnavailableFragment extends Fragment implements OnClickListener {
+public class ContactsUnavailableFragment extends AnalyticsFragment implements OnClickListener {
private View mView;
private TextView mMessageView;
diff --git a/src/com/android/contacts/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
index d47cb22..3ddffbb 100644
--- a/src/com/android/contacts/preference/ContactsPreferenceActivity.java
+++ b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
@@ -20,18 +20,18 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import android.preference.PreferenceActivity;
import android.view.MenuItem;
import com.android.contacts.R;
import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.commonbind.analytics.AnalyticsPreferenceActivity;
import java.util.List;
/**
* Contacts settings.
*/
-public final class ContactsPreferenceActivity extends PreferenceActivity {
+public final class ContactsPreferenceActivity extends AnalyticsPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 9cd854a..909b94b 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -177,8 +177,7 @@
private static final int ANIMATION_STATUS_BAR_COLOR_CHANGE_DURATION = 150;
private static final int REQUEST_CODE_CONTACT_EDITOR_ACTIVITY = 1;
- private static final int DEFAULT_SCRIM_ALPHA = 0xC8;
- private static final int SCRIM_COLOR = Color.argb(DEFAULT_SCRIM_ALPHA, 0, 0, 0);
+ private static final int SCRIM_COLOR = Color.argb(0xC8, 0, 0, 0);
private static final int REQUEST_CODE_CONTACT_SELECTION_ACTIVITY = 2;
private static final String MIMETYPE_SMS = "vnd.android-dir/mms-sms";
@@ -366,14 +365,6 @@
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- // Force the window dim amount to the scrim value for app transition animations
- // The scrim may be removed before the window transitions to the new activity, which
- // can cause a flicker in the status and navigation bar. Set dim alone does not work
- // well because the request is passed through IPC which makes it slow to animate.
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND,
- WindowManager.LayoutParams.FLAG_DIM_BEHIND);
- getWindow().setDimAmount(mWindowScrim.getAlpha() / DEFAULT_SCRIM_ALPHA);
-
mHasIntentLaunched = true;
try {
startActivity(intent);
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index 72dc996..20bc5b1 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -41,6 +41,7 @@
import android.widget.Scroller;
import android.widget.ScrollView;
import android.widget.TextView;
+import android.widget.Toolbar;
/**
* A custom {@link ViewGroup} that operates similarly to a {@link ScrollView}, except with multiple
@@ -103,7 +104,7 @@
private MultiShrinkScrollerListener mListener;
private TextView mLargeTextView;
private View mPhotoTouchInterceptOverlay;
- /** Contains desired location/size of the title, once the header is fully compressed */
+ /** Contains desired size & vertical offset of the title, once the header is fully compressed */
private TextView mInvisiblePlaceholderTextView;
private View mTitleGradientView;
private View mActionBarGradientView;
@@ -303,6 +304,7 @@
mTitleGradientView.setBackground(mTitleGradientDrawable);
mActionBarGradientView = findViewById(R.id.action_bar_gradient);
mActionBarGradientView.setBackground(mActionBarGradientDrawable);
+ mCollapsedTitleStartMargin = ((Toolbar) findViewById(R.id.toolbar)).getContentInsetStart();
mPhotoTouchInterceptOverlay = findViewById(R.id.photo_touch_intercept_overlay);
if (!mIsTwoPanel) {
@@ -1007,17 +1009,9 @@
*/
private void calculateCollapsedLargeTitlePadding() {
final Rect largeTextViewRect = new Rect();
- final Rect invisiblePlaceholderTextViewRect = new Rect();
mToolbar.getBoundsOnScreen(largeTextViewRect);
+ final Rect invisiblePlaceholderTextViewRect = new Rect();
mInvisiblePlaceholderTextView.getBoundsOnScreen(invisiblePlaceholderTextViewRect);
- if (isLayoutRtl()) {
- mCollapsedTitleStartMargin = largeTextViewRect.right
- - invisiblePlaceholderTextViewRect.right;
- } else {
- mCollapsedTitleStartMargin = invisiblePlaceholderTextViewRect.left
- - largeTextViewRect.left;
- }
-
// Distance between top of toolbar to the center of the target rectangle.
final int desiredTopToCenter = (
invisiblePlaceholderTextViewRect.top + invisiblePlaceholderTextViewRect.bottom)