diff options
author | Justin Klaassen <justinklaassen@google.com> | 2017-10-30 17:25:37 -0400 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2017-10-30 17:25:37 -0400 |
commit | 46c77c203439b3b37c99d09e326df4b1fe08c10b (patch) | |
tree | 70d29abbfbb1106cd0830b33bc7e69e6fb151b1e /android/support | |
parent | 47ed54e5d312f899507d28d6e95ccc18a0de19fe (diff) | |
download | android-28-46c77c203439b3b37c99d09e326df4b1fe08c10b.tar.gz |
Import Android SDK Platform P [4423826]
/google/data/ro/projects/android/fetch_artifact \
--bid 4423826 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4423826.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: I45f7bdc9b9c1cdcba75386623ae5f3ead6db4da8
Diffstat (limited to 'android/support')
11 files changed, 70 insertions, 101 deletions
diff --git a/android/support/car/widget/CarRecyclerView.java b/android/support/car/widget/CarRecyclerView.java index edc32415..2684c58a 100644 --- a/android/support/car/widget/CarRecyclerView.java +++ b/android/support/car/widget/CarRecyclerView.java @@ -18,8 +18,6 @@ package android.support.car.widget; import android.content.Context; import android.graphics.Canvas; -import android.os.Parcel; -import android.os.Parcelable; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; @@ -27,9 +25,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - /** * Custom {@link RecyclerView} that helps {@link CarLayoutManager} properly fling and paginate. * @@ -37,11 +32,7 @@ import java.lang.reflect.InvocationTargetException; * #setFadeLastItem(boolean)}. */ public class CarRecyclerView extends RecyclerView { - private static final String PARCEL_CLASS = "android.os.Parcel"; - private static final String SAVED_STATE_CLASS = - "android.support.v7.widget.RecyclerView.SavedState"; private boolean mFadeLastItem; - private Constructor<?> mSavedStateConstructor; /** * If the user releases the list with a velocity of 0, {@link #fling(int, int)} will not be * called. However, we want to make sure that the list still snaps to the next page when this @@ -64,30 +55,6 @@ public class CarRecyclerView extends RecyclerView { } @Override - protected void onRestoreInstanceState(Parcelable state) { - if (state.getClass().getClassLoader() != getClass().getClassLoader()) { - if (mSavedStateConstructor == null) { - mSavedStateConstructor = getSavedStateConstructor(); - } - // Class loader mismatch, recreate from parcel. - Parcel obtain = Parcel.obtain(); - state.writeToParcel(obtain, 0); - try { - Parcelable newState = (Parcelable) mSavedStateConstructor.newInstance(obtain); - super.onRestoreInstanceState(newState); - } catch (InstantiationException - | IllegalAccessException - | IllegalArgumentException - | InvocationTargetException e) { - // Fail loudy here. - throw new RuntimeException(e); - } - } else { - super.onRestoreInstanceState(state); - } - } - - @Override public boolean fling(int velocityX, int velocityY) { mWasFlingCalledForGesture = true; return ((CarLayoutManager) getLayoutManager()).settleScrollForFling(this, velocityY); @@ -158,35 +125,6 @@ public class CarRecyclerView extends RecyclerView { smoothScrollToPosition(pageDownPosition); } - /** Sets {@link #mSavedStateConstructor} to private SavedState constructor. */ - private Constructor<?> getSavedStateConstructor() { - Class<?> savedStateClass = null; - // Find package private subclass RecyclerView$SavedState. - for (Class<?> c : RecyclerView.class.getDeclaredClasses()) { - if (c.getCanonicalName().equals(SAVED_STATE_CLASS)) { - savedStateClass = c; - break; - } - } - if (savedStateClass == null) { - throw new RuntimeException("RecyclerView$SavedState not found!"); - } - // Find constructor that takes a {@link Parcel}. - for (Constructor<?> c : savedStateClass.getDeclaredConstructors()) { - Class<?>[] parameterTypes = c.getParameterTypes(); - if (parameterTypes.length == 1 - && parameterTypes[0].getCanonicalName().equals(PARCEL_CLASS)) { - mSavedStateConstructor = c; - mSavedStateConstructor.setAccessible(true); - break; - } - } - if (mSavedStateConstructor == null) { - throw new RuntimeException("RecyclerView$SavedState constructor not found!"); - } - return mSavedStateConstructor; - } - /** * Fades child by alpha. If child is a {@link ViewGroup} then it will recursively fade its * children instead. diff --git a/android/support/design/widget/CoordinatorLayout.java b/android/support/design/widget/CoordinatorLayout.java index 94de9b86..477a8d62 100644 --- a/android/support/design/widget/CoordinatorLayout.java +++ b/android/support/design/widget/CoordinatorLayout.java @@ -610,8 +610,8 @@ public class CoordinatorLayout extends ViewGroup implements NestedScrollingParen } Constructor<Behavior> c = constructors.get(fullName); if (c == null) { - final Class<Behavior> clazz = (Class<Behavior>) Class.forName(fullName, true, - context.getClassLoader()); + final Class<Behavior> clazz = (Class<Behavior>) context.getClassLoader() + .loadClass(fullName); c = clazz.getConstructor(CONSTRUCTOR_PARAMS); c.setAccessible(true); constructors.put(fullName, c); diff --git a/android/support/mediacompat/testlib/IntentConstants.java b/android/support/mediacompat/testlib/IntentConstants.java index b0e3d5fe..a18bcf32 100644 --- a/android/support/mediacompat/testlib/IntentConstants.java +++ b/android/support/mediacompat/testlib/IntentConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/android/support/mediacompat/testlib/MediaBrowserConstants.java b/android/support/mediacompat/testlib/MediaBrowserConstants.java index 8ef0a355..86024d90 100644 --- a/android/support/mediacompat/testlib/MediaBrowserConstants.java +++ b/android/support/mediacompat/testlib/MediaBrowserConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/android/support/mediacompat/testlib/MediaControllerConstants.java b/android/support/mediacompat/testlib/MediaControllerConstants.java index 1de00efc..5fa086b3 100644 --- a/android/support/mediacompat/testlib/MediaControllerConstants.java +++ b/android/support/mediacompat/testlib/MediaControllerConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/android/support/mediacompat/testlib/MediaSessionConstants.java b/android/support/mediacompat/testlib/MediaSessionConstants.java index 79381e5e..95be1621 100644 --- a/android/support/mediacompat/testlib/MediaSessionConstants.java +++ b/android/support/mediacompat/testlib/MediaSessionConstants.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/android/support/v17/leanback/app/BrowseFragment.java b/android/support/v17/leanback/app/BrowseFragment.java index f3773895..ae31c4fb 100644 --- a/android/support/v17/leanback/app/BrowseFragment.java +++ b/android/support/v17/leanback/app/BrowseFragment.java @@ -682,7 +682,6 @@ public class BrowseFragment extends BaseFragment { private ObjectAdapter mAdapter; private PresenterSelector mAdapterPresenter; - private PresenterSelector mWrappingPresenterSelector; private int mHeadersState = HEADERS_ENABLED; private int mBrandColor = Color.TRANSPARENT; @@ -767,7 +766,11 @@ public class BrowseFragment extends BaseFragment { * Wrapping app provided PresenterSelector to support InvisibleRowPresenter for SectionRow * DividerRow and PageRow. */ - private void createAndSetWrapperPresenter() { + private void updateWrapperPresenter() { + if (mAdapter == null) { + mAdapterPresenter = null; + return; + } final PresenterSelector adapterPresenter = mAdapter.getPresenterSelector(); if (adapterPresenter == null) { throw new IllegalArgumentException("Adapter.getPresenterSelector() is null"); @@ -812,18 +815,16 @@ public class BrowseFragment extends BaseFragment { */ public void setAdapter(ObjectAdapter adapter) { mAdapter = adapter; - createAndSetWrapperPresenter(); + updateWrapperPresenter(); if (getView() == null) { return; } - replaceMainFragment(mSelectedPosition); - if (adapter != null) { - if (mMainFragmentRowsAdapter != null) { - mMainFragmentRowsAdapter.setAdapter(new ListRowDataAdapter(adapter)); - } - mHeadersFragment.setAdapter(adapter); + if (mMainFragmentRowsAdapter != null) { + mMainFragmentRowsAdapter.setAdapter( + adapter == null ? null : new ListRowDataAdapter(adapter)); } + mHeadersFragment.setAdapter(adapter); } public final MainFragmentAdapterRegistry getMainFragmentRegistry() { diff --git a/android/support/v17/leanback/app/BrowseSupportFragment.java b/android/support/v17/leanback/app/BrowseSupportFragment.java index 03b3c8a6..4a2502a8 100644 --- a/android/support/v17/leanback/app/BrowseSupportFragment.java +++ b/android/support/v17/leanback/app/BrowseSupportFragment.java @@ -679,7 +679,6 @@ public class BrowseSupportFragment extends BaseSupportFragment { private ObjectAdapter mAdapter; private PresenterSelector mAdapterPresenter; - private PresenterSelector mWrappingPresenterSelector; private int mHeadersState = HEADERS_ENABLED; private int mBrandColor = Color.TRANSPARENT; @@ -764,7 +763,11 @@ public class BrowseSupportFragment extends BaseSupportFragment { * Wrapping app provided PresenterSelector to support InvisibleRowPresenter for SectionRow * DividerRow and PageRow. */ - private void createAndSetWrapperPresenter() { + private void updateWrapperPresenter() { + if (mAdapter == null) { + mAdapterPresenter = null; + return; + } final PresenterSelector adapterPresenter = mAdapter.getPresenterSelector(); if (adapterPresenter == null) { throw new IllegalArgumentException("Adapter.getPresenterSelector() is null"); @@ -809,18 +812,16 @@ public class BrowseSupportFragment extends BaseSupportFragment { */ public void setAdapter(ObjectAdapter adapter) { mAdapter = adapter; - createAndSetWrapperPresenter(); + updateWrapperPresenter(); if (getView() == null) { return; } - replaceMainFragment(mSelectedPosition); - if (adapter != null) { - if (mMainFragmentRowsAdapter != null) { - mMainFragmentRowsAdapter.setAdapter(new ListRowDataAdapter(adapter)); - } - mHeadersSupportFragment.setAdapter(adapter); + if (mMainFragmentRowsAdapter != null) { + mMainFragmentRowsAdapter.setAdapter( + adapter == null ? null : new ListRowDataAdapter(adapter)); } + mHeadersSupportFragment.setAdapter(adapter); } public final MainFragmentAdapterRegistry getMainFragmentRegistry() { diff --git a/android/support/v17/leanback/widget/GridLayoutManager.java b/android/support/v17/leanback/widget/GridLayoutManager.java index af37f77a..dded0715 100644 --- a/android/support/v17/leanback/widget/GridLayoutManager.java +++ b/android/support/v17/leanback/widget/GridLayoutManager.java @@ -2693,6 +2693,40 @@ final class GridLayoutManager extends RecyclerView.LayoutManager { } } + // Observer is registered on Adapter to invalidate saved instance state + final RecyclerView.AdapterDataObserver mObServer = new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + mChildrenStates.clear(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + if (DEBUG) { + Log.v(getTag(), "onItemRangeChanged positionStart " + + positionStart + " itemCount " + itemCount); + } + for (int i = positionStart, end = positionStart + itemCount; i < end; i++) { + mChildrenStates.remove(i); + } + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + mChildrenStates.clear(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + mChildrenStates.clear(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + mChildrenStates.clear(); + } + }; + @Override public void onItemsAdded(RecyclerView recyclerView, int positionStart, int itemCount) { if (DEBUG) Log.v(getTag(), "onItemsAdded positionStart " @@ -2704,14 +2738,12 @@ final class GridLayoutManager extends RecyclerView.LayoutManager { mFocusPositionOffset += itemCount; } } - mChildrenStates.clear(); } @Override public void onItemsChanged(RecyclerView recyclerView) { if (DEBUG) Log.v(getTag(), "onItemsChanged"); mFocusPositionOffset = 0; - mChildrenStates.clear(); } @Override @@ -2732,7 +2764,6 @@ final class GridLayoutManager extends RecyclerView.LayoutManager { } } } - mChildrenStates.clear(); } @Override @@ -2753,16 +2784,6 @@ final class GridLayoutManager extends RecyclerView.LayoutManager { mFocusPositionOffset += itemCount; } } - mChildrenStates.clear(); - } - - @Override - public void onItemsUpdated(RecyclerView recyclerView, int positionStart, int itemCount) { - if (DEBUG) Log.v(getTag(), "onItemsUpdated positionStart " - + positionStart + " itemCount " + itemCount); - for (int i = positionStart, end = positionStart + itemCount; i < end; i++) { - mChildrenStates.remove(i); - } } @Override @@ -3460,12 +3481,16 @@ final class GridLayoutManager extends RecyclerView.LayoutManager { mFocusPosition = NO_POSITION; mFocusPositionOffset = 0; mChildrenStates.clear(); + oldAdapter.unregisterAdapterDataObserver(mObServer); } if (newAdapter instanceof FacetProviderAdapter) { mFacetProviderAdapter = (FacetProviderAdapter) newAdapter; } else { mFacetProviderAdapter = null; } + if (newAdapter != null) { + newAdapter.registerAdapterDataObserver(mObServer); + } super.onAdapterChanged(oldAdapter, newAdapter); } diff --git a/android/support/v4/app/FragmentActivity.java b/android/support/v4/app/FragmentActivity.java index cb3c59a6..614ff351 100644 --- a/android/support/v4/app/FragmentActivity.java +++ b/android/support/v4/app/FragmentActivity.java @@ -977,7 +977,11 @@ public class FragmentActivity extends BaseFragmentActivityApi16 implements continue; } fragment.mLifecycleRegistry.markState(state); - markState(fragment.getChildFragmentManager(), state); + + FragmentManager childFragmentManager = fragment.peekChildFragmentManager(); + if (childFragmentManager != null) { + markState(childFragmentManager, state); + } } } } diff --git a/android/support/v7/widget/TooltipPopup.java b/android/support/v7/widget/TooltipPopup.java index f707c8fc..dc20aa1f 100644 --- a/android/support/v7/widget/TooltipPopup.java +++ b/android/support/v7/widget/TooltipPopup.java @@ -56,7 +56,7 @@ class TooltipPopup { TooltipPopup(Context context) { mContext = context; - mContentView = LayoutInflater.from(mContext).inflate(R.layout.tooltip, null); + mContentView = LayoutInflater.from(mContext).inflate(R.layout.abc_tooltip, null); mMessageView = (TextView) mContentView.findViewById(R.id.message); mLayoutParams.setTitle(getClass().getSimpleName()); |