summaryrefslogtreecommitdiff
path: root/android/support
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2017-10-30 17:25:37 -0400
committerJustin Klaassen <justinklaassen@google.com>2017-10-30 17:25:37 -0400
commit46c77c203439b3b37c99d09e326df4b1fe08c10b (patch)
tree70d29abbfbb1106cd0830b33bc7e69e6fb151b1e /android/support
parent47ed54e5d312f899507d28d6e95ccc18a0de19fe (diff)
downloadandroid-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')
-rw-r--r--android/support/car/widget/CarRecyclerView.java62
-rw-r--r--android/support/design/widget/CoordinatorLayout.java4
-rw-r--r--android/support/mediacompat/testlib/IntentConstants.java2
-rw-r--r--android/support/mediacompat/testlib/MediaBrowserConstants.java2
-rw-r--r--android/support/mediacompat/testlib/MediaControllerConstants.java2
-rw-r--r--android/support/mediacompat/testlib/MediaSessionConstants.java2
-rw-r--r--android/support/v17/leanback/app/BrowseFragment.java19
-rw-r--r--android/support/v17/leanback/app/BrowseSupportFragment.java19
-rw-r--r--android/support/v17/leanback/widget/GridLayoutManager.java51
-rw-r--r--android/support/v4/app/FragmentActivity.java6
-rw-r--r--android/support/v7/widget/TooltipPopup.java2
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());