Loading src/com/android/settings/datausage/AppDataUsage.java +32 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import androidx.loader.content.Loader; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceCategory; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; Loading Loading @@ -105,6 +107,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private Context mContext; private ArrayList<Long> mCycles; private long mSelectedCycle; private boolean mIsLoading; @Override public void onCreate(Bundle icicle) { Loading Loading @@ -226,6 +229,16 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC @Override public void onResume() { super.onResume(); // No animations will occur before: // - LOADER_APP_USAGE_DATA initially updates the cycle // - updatePrefs() initially updates the preference visibility // This is mainly for the cycle spinner, because when the page is entered from the // AppInfoDashboardFragment, there is no way to know whether the cycle data is available // before finished the async loading. // The animator will be set back if any page updates happens after loading, in // setBackPreferenceListAnimatorIfLoaded(). mIsLoading = true; getListView().setItemAnimator(null); if (mDataSaverBackend != null) { mDataSaverBackend.addListener(this); } Loading Loading @@ -297,7 +310,25 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } } /** * Sets back the preference list's animator if the loading is finished. * * The preference list's animator was temporarily removed before loading in onResume(). * When need to update the preference visibility in this page after the loading, adding the * animator back to keeping the usual animations. */ private void setBackPreferenceListAnimatorIfLoaded() { if (mIsLoading) { return; } RecyclerView recyclerView = getListView(); if (recyclerView.getItemAnimator() == null) { recyclerView.setItemAnimator(new DefaultItemAnimator()); } } private void updatePrefs(boolean restrictBackground, boolean unrestrictData) { setBackPreferenceListAnimatorIfLoaded(); final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted( mContext, mPackageName, UserHandle.getUserId(mAppItem.key)); if (mRestrictBackground != null) { Loading Loading @@ -448,6 +479,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } else { bindData(0 /* position */); } mIsLoading = false; } @Override Loading tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.applications.AppInfoBase; import com.android.settings.testutils.FakeFeatureFactory; Loading Loading @@ -240,6 +241,7 @@ public class AppDataUsageTest { ReflectionHelpers.setField(mFragment, "mUnrestrictedData", unrestrictedDataPref); ReflectionHelpers.setField(mFragment, "mDataSaverBackend", dataSaverBackend); ReflectionHelpers.setField(mFragment.services, "mPolicyManager", networkPolicyManager); when(mFragment.getListView()).thenReturn(mock(RecyclerView.class)); ShadowRestrictedLockUtilsInternal.setRestricted(true); doReturn(NetworkPolicyManager.POLICY_NONE).when(networkPolicyManager) Loading Loading
src/com/android/settings/datausage/AppDataUsage.java +32 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import androidx.loader.content.Loader; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceCategory; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; Loading Loading @@ -105,6 +107,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private Context mContext; private ArrayList<Long> mCycles; private long mSelectedCycle; private boolean mIsLoading; @Override public void onCreate(Bundle icicle) { Loading Loading @@ -226,6 +229,16 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC @Override public void onResume() { super.onResume(); // No animations will occur before: // - LOADER_APP_USAGE_DATA initially updates the cycle // - updatePrefs() initially updates the preference visibility // This is mainly for the cycle spinner, because when the page is entered from the // AppInfoDashboardFragment, there is no way to know whether the cycle data is available // before finished the async loading. // The animator will be set back if any page updates happens after loading, in // setBackPreferenceListAnimatorIfLoaded(). mIsLoading = true; getListView().setItemAnimator(null); if (mDataSaverBackend != null) { mDataSaverBackend.addListener(this); } Loading Loading @@ -297,7 +310,25 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } } /** * Sets back the preference list's animator if the loading is finished. * * The preference list's animator was temporarily removed before loading in onResume(). * When need to update the preference visibility in this page after the loading, adding the * animator back to keeping the usual animations. */ private void setBackPreferenceListAnimatorIfLoaded() { if (mIsLoading) { return; } RecyclerView recyclerView = getListView(); if (recyclerView.getItemAnimator() == null) { recyclerView.setItemAnimator(new DefaultItemAnimator()); } } private void updatePrefs(boolean restrictBackground, boolean unrestrictData) { setBackPreferenceListAnimatorIfLoaded(); final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted( mContext, mPackageName, UserHandle.getUserId(mAppItem.key)); if (mRestrictBackground != null) { Loading Loading @@ -448,6 +479,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } else { bindData(0 /* position */); } mIsLoading = false; } @Override Loading
tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.applications.AppInfoBase; import com.android.settings.testutils.FakeFeatureFactory; Loading Loading @@ -240,6 +241,7 @@ public class AppDataUsageTest { ReflectionHelpers.setField(mFragment, "mUnrestrictedData", unrestrictedDataPref); ReflectionHelpers.setField(mFragment, "mDataSaverBackend", dataSaverBackend); ReflectionHelpers.setField(mFragment.services, "mPolicyManager", networkPolicyManager); when(mFragment.getListView()).thenReturn(mock(RecyclerView.class)); ShadowRestrictedLockUtilsInternal.setRestricted(true); doReturn(NetworkPolicyManager.POLICY_NONE).when(networkPolicyManager) Loading