From aed8f361fc46b106d07e51a3152d1cef96662e00 Mon Sep 17 00:00:00 2001 From: tmfang Date: Mon, 18 Mar 2019 16:56:09 +0800 Subject: [PATCH] Remove shadow from "Apps and Notifications" - Also create a util method to reuse it in different class. Test: visual Fixes: 128437380 Change-Id: I0e136feed3aead8c37e381095daebded55ef298d --- src/com/android/settings/Utils.java | 28 +++++++++++++++++++ .../AppAndNotificationDashboardFragment.java | 5 ++++ .../privacy/PrivacyDashboardFragment.java | 25 ++--------------- .../src/com/android/settings/UtilsTest.java | 22 +++++++++++++++ .../privacy/PrivacyDashboardFragmentTest.java | 4 +-- 5 files changed, 59 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index a93fb76f2c8..36230d17dca 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -22,6 +22,8 @@ import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH; import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import android.annotation.Nullable; +import android.app.ActionBar; +import android.app.Activity; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.IActivityManager; @@ -92,6 +94,7 @@ import android.widget.TabWidget; import androidx.annotation.StringRes; import androidx.core.graphics.drawable.IconCompat; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; import androidx.preference.PreferenceGroup; @@ -101,6 +104,7 @@ import com.android.internal.widget.LockPatternUtils; import com.android.settings.core.FeatureFlags; import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.password.ChooseLockSettingsHelper; +import com.android.settingslib.widget.ActionBarShadowController; import java.net.InetAddress; import java.util.Iterator; @@ -1023,4 +1027,28 @@ public final class Utils extends com.android.settingslib.Utils { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); return !(am.isLowRamDevice() && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)); } + + /** + * Adds a shadow appear/disappear animation to action bar scroll. + * + *

+ * This method must be called after {@link Fragment#onCreate(Bundle)}. + */ + public static void setActionBarShadowAnimation(Activity activity, Lifecycle lifecycle, + View scrollView) { + if (activity == null) { + Log.w(TAG, "No activity, cannot style actionbar."); + return; + } + final ActionBar actionBar = activity.getActionBar(); + if (actionBar == null) { + Log.w(TAG, "No actionbar, cannot style actionbar."); + return; + } + actionBar.setElevation(0); + + if (lifecycle != null && scrollView != null) { + ActionBarShadowController.attachToView(activity, lifecycle, scrollView); + } + } } diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java index 7aaf80de65c..c32a33dc5a0 100644 --- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java +++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java @@ -21,6 +21,7 @@ import android.content.Context; import android.provider.SearchIndexableResource; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.notification.EmergencyBroadcastPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; @@ -85,6 +86,10 @@ public class AppAndNotificationDashboardFragment extends DashboardFragment { super.onResume(); mIsFirstLaunch = false; + + if (mRecentAppsPreferenceController.isAvailable()) { + Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), getListView()); + } } @Override diff --git a/src/com/android/settings/privacy/PrivacyDashboardFragment.java b/src/com/android/settings/privacy/PrivacyDashboardFragment.java index be6701e05b1..fa21f9dd444 100644 --- a/src/com/android/settings/privacy/PrivacyDashboardFragment.java +++ b/src/com/android/settings/privacy/PrivacyDashboardFragment.java @@ -16,25 +16,22 @@ package com.android.settings.privacy; -import android.app.ActionBar; -import android.app.Activity; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; import android.provider.SearchIndexableResource; -import android.util.Log; import android.view.View; import androidx.annotation.VisibleForTesting; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.search.SearchIndexable; -import com.android.settingslib.widget.ActionBarShadowController; import java.util.ArrayList; import java.util.List; @@ -87,28 +84,10 @@ public class PrivacyDashboardFragment extends DashboardFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - styleActionBar(); + Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), getListView()); initLoadingBar(); } - @VisibleForTesting - void styleActionBar() { - final Activity activity = getActivity(); - final ActionBar actionBar = activity.getActionBar(); - final Lifecycle lifecycle = getSettingsLifecycle(); - final View scrollView = getListView(); - - if (actionBar == null) { - Log.w(TAG, "No actionbar, cannot style actionbar."); - return; - } - - actionBar.setElevation(0); - if (lifecycle != null && scrollView != null) { - ActionBarShadowController.attachToView(activity, lifecycle, scrollView); - } - } - @VisibleForTesting void initLoadingBar() { mProgressHeader = setPinnedHeaderView(R.layout.progress_header); diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java index 37186cad8b1..3d3aff46e69 100644 --- a/tests/robotests/src/com/android/settings/UtilsTest.java +++ b/tests/robotests/src/com/android/settings/UtilsTest.java @@ -28,6 +28,8 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActionBar; +import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; @@ -51,15 +53,18 @@ import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.util.IconDrawableFactory; import android.widget.EditText; +import android.widget.ScrollView; import android.widget.TextView; import androidx.core.graphics.drawable.IconCompat; +import androidx.fragment.app.FragmentActivity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -259,4 +264,21 @@ public class UtilsTest { public void isPackageEnabled_noApp_returnFalse() { assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); } + + @Test + public void setActionBarShadowAnimation_nullParameters_shouldNotCrash() { + // no crash here + Utils.setActionBarShadowAnimation(null, null, null); + } + + @Test + public void setActionBarShadowAnimation_shouldSetElevationToZero() { + final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class); + final ActionBar actionBar = activity.getActionBar(); + + Utils.setActionBarShadowAnimation(activity, activity.getLifecycle(), + new ScrollView(mContext)); + + assertThat(actionBar.getElevation()).isEqualTo(0.f); + } } diff --git a/tests/robotests/src/com/android/settings/privacy/PrivacyDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/privacy/PrivacyDashboardFragmentTest.java index 482eaebf4b7..80f3900e00d 100644 --- a/tests/robotests/src/com/android/settings/privacy/PrivacyDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/privacy/PrivacyDashboardFragmentTest.java @@ -80,10 +80,10 @@ public class PrivacyDashboardFragmentTest { } @Test - public void onViewCreated_shouldCallStyleActionBar() { + public void onViewCreated_shouldSetActionBarShadowAnimation() { mFragment.onViewCreated(new View(mContext), new Bundle()); - verify(mFragment).styleActionBar(); + assertThat(mFragment.getActivity().getActionBar().getElevation()).isEqualTo(0.f); } @Test