Change initial load animation of main list
Make each row slide up and fade in
Bug: 30318643
Change-Id: Ie05352a92142cbfb15c942896abf8d479f4e915d
diff --git a/res/anim/slide_and_fade_in.xml b/res/anim/slide_and_fade_in.xml
new file mode 100644
index 0000000..c362da6
--- /dev/null
+++ b/res/anim/slide_and_fade_in.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:interpolator/linear_out_slow_in">
+ <alpha
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"/>
+ <translate
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromYDelta="5%"
+ android:toYDelta="0"/>
+</set>
diff --git a/res/anim/slide_and_fade_in_layout_animation.xml b/res/anim/slide_and_fade_in_layout_animation.xml
new file mode 100644
index 0000000..7f7e558
--- /dev/null
+++ b/res/anim/slide_and_fade_in_layout_animation.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
+ android:animation="@anim/slide_and_fade_in"
+ android:delay="10%"/>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 3bb0ae5..f1392f8 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -348,6 +348,7 @@
if (mAllFragment == null) {
mAllFragment = new DefaultContactBrowseListFragment();
+ mAllFragment.setAnimateOnLoad(true);
transaction.add(R.id.tab_pager, mAllFragment, ALL_TAG);
}
@@ -775,10 +776,6 @@
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment f = getFragment(position);
- if (!mIsRecreatedInstance && (f instanceof DefaultContactBrowseListFragment)) {
- mCurTransaction.setCustomAnimations(android.R.animator.fade_in,
- android.R.animator.fade_out);
- }
mCurTransaction.show(f);
// Non primary pages are not visible.
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index 937d4c2..8b55047 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -16,6 +16,23 @@
package com.android.contacts.list;
+import android.content.Context;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.support.v4.view.ViewCompat;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.AbsListView;
+import android.widget.ImageView;
+import android.widget.TextView;
+
import com.android.contacts.R;
import com.android.contacts.common.list.ContactEntryListFragment;
import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
@@ -28,20 +45,6 @@
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.model.account.GoogleAccountType;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.support.v4.view.ViewCompat;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.AbsListView;
-import android.widget.ImageView;
-import android.widget.TextView;
-
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
@@ -54,6 +57,7 @@
extends ContactEntryListFragment<T>
implements SelectedContactsListener {
+ protected boolean mAnimateOnLoad;
private static final String TAG = "MultiContactsList";
public interface OnCheckBoxListActionListener {
@@ -89,12 +93,26 @@
mSearchResultClicked = false;
}
+ public void setAnimateOnLoad(boolean shouldAnimate) {
+ mAnimateOnLoad = shouldAnimate;
+ }
+
@Override
public void onSelectedContactsChanged() {
if (mCheckBoxListListener != null) mCheckBoxListListener.onSelectedContactIdsChanged();
}
@Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ if (savedInstanceState == null && mAnimateOnLoad) {
+ setLayoutAnimation(getListView(), R.anim.slide_and_fade_in_layout_animation);
+ }
+ return getView();
+ }
+
+ @Override
public void onSelectedContactsChangedViaCheckBox() {
if (getAdapter().getSelectedContactIds().size() == 0) {
// Last checkbox has been unchecked. So we should stop displaying checkboxes.
@@ -283,6 +301,27 @@
return searchState;
}
+ protected void setLayoutAnimation(final ViewGroup view, int animationId) {
+ if (view == null) {
+ return;
+ }
+ view.setLayoutAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.setLayoutAnimation(null);
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+ });
+ view.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(getActivity(), animationId));
+ }
+
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {