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:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user