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 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.
*
* <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 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

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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