Remove shadow from "Apps and Notifications"

- Also create a util method to reuse it in different class.

Test: visual
Fixes: 128437380
Change-Id: I0e136feed3aead8c37e381095daebded55ef298d
This commit is contained in:
tmfang
2019-03-18 16:56:09 +08:00
parent f669a3bd70
commit aed8f361fc
5 changed files with 59 additions and 25 deletions

View File

@@ -22,6 +22,8 @@ import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.AppGlobals; import android.app.AppGlobals;
import android.app.IActivityManager; import android.app.IActivityManager;
@@ -92,6 +94,7 @@ import android.widget.TabWidget;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceGroup;
@@ -101,6 +104,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.FeatureFlags; import com.android.settings.core.FeatureFlags;
import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.widget.ActionBarShadowController;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.Iterator; 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); ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
return !(am.isLowRamDevice() && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)); return !(am.isLowRamDevice() && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q));
} }
/**
* Adds a shadow appear/disappear animation to action bar scroll.
*
* <p/>
* 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);
}
}
} }

View File

@@ -21,6 +21,7 @@ import android.content.Context;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.notification.EmergencyBroadcastPreferenceController; import com.android.settings.notification.EmergencyBroadcastPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
@@ -85,6 +86,10 @@ public class AppAndNotificationDashboardFragment extends DashboardFragment {
super.onResume(); super.onResume();
mIsFirstLaunch = false; mIsFirstLaunch = false;
if (mRecentAppsPreferenceController.isAvailable()) {
Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), getListView());
}
} }
@Override @Override

View File

@@ -16,25 +16,22 @@
package com.android.settings.privacy; package com.android.settings.privacy;
import android.app.ActionBar;
import android.app.Activity;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import android.util.Log;
import android.view.View; import android.view.View;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.ActionBarShadowController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -87,28 +84,10 @@ public class PrivacyDashboardFragment extends DashboardFragment {
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
styleActionBar(); Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), getListView());
initLoadingBar(); 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 @VisibleForTesting
void initLoadingBar() { void initLoadingBar() {
mProgressHeader = setPinnedHeaderView(R.layout.progress_header); mProgressHeader = setPinnedHeaderView(R.layout.progress_header);

View File

@@ -28,6 +28,8 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActionBar;
import android.app.Activity;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -51,15 +53,18 @@ import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo; import android.os.storage.VolumeInfo;
import android.util.IconDrawableFactory; import android.util.IconDrawableFactory;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.FragmentActivity;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@@ -259,4 +264,21 @@ public class UtilsTest {
public void isPackageEnabled_noApp_returnFalse() { public void isPackageEnabled_noApp_returnFalse() {
assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); 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);
}
} }

View File

@@ -80,10 +80,10 @@ public class PrivacyDashboardFragmentTest {
} }
@Test @Test
public void onViewCreated_shouldCallStyleActionBar() { public void onViewCreated_shouldSetActionBarShadowAnimation() {
mFragment.onViewCreated(new View(mContext), new Bundle()); mFragment.onViewCreated(new View(mContext), new Bundle());
verify(mFragment).styleActionBar(); assertThat(mFragment.getActivity().getActionBar().getElevation()).isEqualTo(0.f);
} }
@Test @Test