Rename SuwLib directories
Rename eclair-mr1 to gingerbread to reflect the min SDK version change, and full-support to recyclerview to better reflect what's inside the directory Also added comments and applied style fixes to keep checkstyle happy. Test: Existing tests pass Change-Id: I20332f718f2aae04092d5e45de944b1efce1a596
|
@ -36,10 +36,10 @@ LOCAL_MANIFEST_FILE := main/AndroidManifest.xml
|
||||||
LOCAL_MODULE := setup-wizard-lib-gingerbread-compat
|
LOCAL_MODULE := setup-wizard-lib-gingerbread-compat
|
||||||
LOCAL_RESOURCE_DIR := \
|
LOCAL_RESOURCE_DIR := \
|
||||||
$(LOCAL_PATH)/main/res \
|
$(LOCAL_PATH)/main/res \
|
||||||
$(LOCAL_PATH)/eclair-mr1/res \
|
$(LOCAL_PATH)/gingerbread/res \
|
||||||
$(LOCAL_PATH)/full-support/res
|
$(LOCAL_PATH)/recyclerview/res
|
||||||
LOCAL_SDK_VERSION := current
|
LOCAL_SDK_VERSION := current
|
||||||
LOCAL_SRC_FILES := $(call all-java-files-under, main/src eclair-mr1/src full-support/src)
|
LOCAL_SRC_FILES := $(call all-java-files-under, main/src gingerbread/src recyclerview/src)
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifdef LOCAL_USE_AAPT2
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,8 @@ endif
|
||||||
ifeq (,$(findstring setup-wizard-lib-gingerbread-compat,$(LOCAL_STATIC_JAVA_LIBRARIES)))
|
ifeq (,$(findstring setup-wizard-lib-gingerbread-compat,$(LOCAL_STATIC_JAVA_LIBRARIES)))
|
||||||
LOCAL_RESOURCE_DIR += \
|
LOCAL_RESOURCE_DIR += \
|
||||||
$(suwlib_dir)/main/res \
|
$(suwlib_dir)/main/res \
|
||||||
$(suwlib_dir)/eclair-mr1/res \
|
$(suwlib_dir)/gingerbread/res \
|
||||||
$(suwlib_dir)/full-support/res
|
$(suwlib_dir)/recyclerview/res
|
||||||
LOCAL_AAPT_FLAGS += --extra-packages com.android.setupwizardlib
|
LOCAL_AAPT_FLAGS += --extra-packages com.android.setupwizardlib
|
||||||
LOCAL_STATIC_JAVA_LIBRARIES += setup-wizard-lib-gingerbread-compat
|
LOCAL_STATIC_JAVA_LIBRARIES += setup-wizard-lib-gingerbread-compat
|
||||||
endif
|
endif
|
||||||
|
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
Before Width: | Height: | Size: 132 B After Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 133 B After Width: | Height: | Size: 133 B |
Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 114 B After Width: | Height: | Size: 114 B |
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
Before Width: | Height: | Size: 191 B After Width: | Height: | Size: 191 B |
Before Width: | Height: | Size: 137 B After Width: | Height: | Size: 137 B |
Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 192 B |
Before Width: | Height: | Size: 208 B After Width: | Height: | Size: 208 B |
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 280 B |
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B |
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 207 B |
|
@ -33,17 +33,35 @@ import com.android.setupwizardlib.R;
|
||||||
*/
|
*/
|
||||||
public class SwitchItem extends Item implements CompoundButton.OnCheckedChangeListener {
|
public class SwitchItem extends Item implements CompoundButton.OnCheckedChangeListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener for check state changes of this switch item.
|
||||||
|
*/
|
||||||
public interface OnCheckedChangeListener {
|
public interface OnCheckedChangeListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback when checked state of a {@link SwitchItem} is changed.
|
||||||
|
*
|
||||||
|
* @see #setOnCheckedChangeListener(OnCheckedChangeListener)
|
||||||
|
*/
|
||||||
void onCheckedChange(SwitchItem item, boolean isChecked);
|
void onCheckedChange(SwitchItem item, boolean isChecked);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean mChecked = false;
|
private boolean mChecked = false;
|
||||||
private OnCheckedChangeListener mListener;
|
private OnCheckedChangeListener mListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a default switch item.
|
||||||
|
*/
|
||||||
public SwitchItem() {
|
public SwitchItem() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a switch item. This constructor is used for inflation from XML.
|
||||||
|
*
|
||||||
|
* @param context The context which this item is inflated in.
|
||||||
|
* @param attrs The XML attributes defined on the item.
|
||||||
|
*/
|
||||||
public SwitchItem(Context context, AttributeSet attrs) {
|
public SwitchItem(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SuwSwitchItem);
|
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SuwSwitchItem);
|
||||||
|
@ -51,6 +69,9 @@ public class SwitchItem extends Item implements CompoundButton.OnCheckedChangeLi
|
||||||
a.recycle();
|
a.recycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether this item should be checked.
|
||||||
|
*/
|
||||||
public void setChecked(boolean checked) {
|
public void setChecked(boolean checked) {
|
||||||
if (mChecked != checked) {
|
if (mChecked != checked) {
|
||||||
mChecked = checked;
|
mChecked = checked;
|
||||||
|
@ -61,6 +82,9 @@ public class SwitchItem extends Item implements CompoundButton.OnCheckedChangeLi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return True if this switch item is currently checked.
|
||||||
|
*/
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return mChecked;
|
return mChecked;
|
||||||
}
|
}
|
||||||
|
@ -91,6 +115,10 @@ public class SwitchItem extends Item implements CompoundButton.OnCheckedChangeLi
|
||||||
switchView.setEnabled(isEnabled());
|
switchView.setEnabled(isEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a listener to listen for changes in checked state. This listener is invoked in both
|
||||||
|
* user toggling the switch and calls to {@link #setChecked(boolean)}.
|
||||||
|
*/
|
||||||
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
|
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
}
|
}
|
|
@ -26,6 +26,10 @@ import android.support.annotation.NonNull;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Button for navigation bar, which includes tinting of its compound drawables to be used for dark
|
||||||
|
* and light themes.
|
||||||
|
*/
|
||||||
public class NavigationBarButton extends Button {
|
public class NavigationBarButton extends Button {
|
||||||
|
|
||||||
public NavigationBarButton(Context context) {
|
public NavigationBarButton(Context context) {
|
||||||
|
@ -120,7 +124,7 @@ public class NavigationBarButton extends Button {
|
||||||
|
|
||||||
private ColorStateList mTintList = null;
|
private ColorStateList mTintList = null;
|
||||||
|
|
||||||
public TintedDrawable(Drawable wrapped) {
|
TintedDrawable(Drawable wrapped) {
|
||||||
super(new Drawable[] { wrapped });
|
super(new Drawable[] { wrapped });
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
<dimen name="suw_items_preferred_height">56dp</dimen>
|
<dimen name="suw_items_preferred_height">56dp</dimen>
|
||||||
|
|
||||||
<!-- Navigation bar -->
|
<!-- Navigation bar -->
|
||||||
<!-- TODO: Move this dimen to eclair-mr1, or see if it should be in platform style as well -->
|
<!-- TODO: Move this dimen to gingerbread, or see if it should be in platform style as well -->
|
||||||
<dimen name="suw_navbar_button_drawable_padding" tools:ignore="UnusedResources">6dp</dimen>
|
<dimen name="suw_navbar_button_drawable_padding" tools:ignore="UnusedResources">6dp</dimen>
|
||||||
<dimen name="suw_navbar_button_padding_sides">10dp</dimen>
|
<dimen name="suw_navbar_button_padding_sides">10dp</dimen>
|
||||||
<dimen name="suw_navbar_height">56dp</dimen>
|
<dimen name="suw_navbar_height">56dp</dimen>
|
||||||
|
|
|
@ -42,6 +42,10 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration {
|
||||||
|
|
||||||
/* static section */
|
/* static section */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface to be implemented by a {@link RecyclerView.ViewHolder} which controls whether
|
||||||
|
* dividers should be shown above and below that item.
|
||||||
|
*/
|
||||||
public interface DividedViewHolder {
|
public interface DividedViewHolder {
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -59,8 +59,7 @@ import com.android.setupwizardlib.template.RecyclerMixin;
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* <p />Fragments using this layout <em>must</em> delegate {@code onCreateRecyclerView} to the
|
* <p />Fragments using this layout <em>must</em> delegate {@code onCreateRecyclerView} to the
|
||||||
* implementation in this class:
|
* implementation in this class: {@link #onCreateRecyclerView}
|
||||||
* {@link #onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)}
|
|
||||||
*/
|
*/
|
||||||
public class SetupWizardPreferenceLayout extends SetupWizardRecyclerLayout {
|
public class SetupWizardPreferenceLayout extends SetupWizardRecyclerLayout {
|
||||||
|
|
|
@ -27,7 +27,7 @@ class ItemViewHolder extends RecyclerView.ViewHolder
|
||||||
private boolean mIsEnabled;
|
private boolean mIsEnabled;
|
||||||
private IItem mItem;
|
private IItem mItem;
|
||||||
|
|
||||||
public ItemViewHolder(View itemView) {
|
ItemViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,16 @@ public class RecyclerItemAdapter extends RecyclerView.Adapter<ItemViewHolder>
|
||||||
*/
|
*/
|
||||||
public static final String TAG_NO_BACKGROUND = "noBackground";
|
public static final String TAG_NO_BACKGROUND = "noBackground";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener for item selection in this adapter.
|
||||||
|
*/
|
||||||
public interface OnItemSelectedListener {
|
public interface OnItemSelectedListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when an item in this adapter is clicked.
|
||||||
|
*
|
||||||
|
* @param item The Item corresponding to the position being clicked.
|
||||||
|
*/
|
||||||
void onItemSelected(IItem item);
|
void onItemSelected(IItem item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +67,11 @@ public class RecyclerItemAdapter extends RecyclerView.Adapter<ItemViewHolder>
|
||||||
mItemHierarchy.registerObserver(this);
|
mItemHierarchy.registerObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the item at the given position.
|
||||||
|
*
|
||||||
|
* @see ItemHierarchy#getItemAt(int)
|
||||||
|
*/
|
||||||
public IItem getItem(int position) {
|
public IItem getItem(int position) {
|
||||||
return mItemHierarchy.getItemAt(position);
|
return mItemHierarchy.getItemAt(position);
|
||||||
}
|
}
|
||||||
|
@ -177,14 +191,27 @@ public class RecyclerItemAdapter extends RecyclerView.Adapter<ItemViewHolder>
|
||||||
notifyItemRangeRemoved(positionStart, itemCount);
|
notifyItemRangeRemoved(positionStart, itemCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an item hierarchy within the root hierarchy.
|
||||||
|
*
|
||||||
|
* @see ItemHierarchy#findItemById(int)
|
||||||
|
*/
|
||||||
public ItemHierarchy findItemById(int id) {
|
public ItemHierarchy findItemById(int id) {
|
||||||
return mItemHierarchy.findItemById(id);
|
return mItemHierarchy.findItemById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the root item hierarchy in this adapter.
|
||||||
|
*/
|
||||||
public ItemHierarchy getRootItemHierarchy() {
|
public ItemHierarchy getRootItemHierarchy() {
|
||||||
return mItemHierarchy;
|
return mItemHierarchy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the listener to listen for when user clicks on a item.
|
||||||
|
*
|
||||||
|
* @see OnItemSelectedListener
|
||||||
|
*/
|
||||||
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
|
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
}
|
}
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
package com.android.setupwizardlib.view;
|
package com.android.setupwizardlib.view;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -41,7 +40,7 @@ public class HeaderRecyclerView extends RecyclerView {
|
||||||
private static class HeaderViewHolder extends ViewHolder
|
private static class HeaderViewHolder extends ViewHolder
|
||||||
implements DividerItemDecoration.DividedViewHolder {
|
implements DividerItemDecoration.DividedViewHolder {
|
||||||
|
|
||||||
public HeaderViewHolder(View itemView) {
|
HeaderViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,23 +118,18 @@ public class HeaderRecyclerView extends RecyclerView {
|
||||||
setHasStableIds(mAdapter.hasStableIds());
|
setHasStableIds(mAdapter.hasStableIds());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InlinedApi") // MATCH_PARENT is the same constant as FILL_PARENT available
|
|
||||||
// on earlier versions.
|
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
/*
|
// Returning the same view (mHeader) results in crash ".. but view is not a real child."
|
||||||
* Returning the same view (mHeader) results in crash ".. but view is not a real child."
|
// The framework creates more than one instance of header because of "disappear"
|
||||||
* The framework creates more than one instance of header because of "disappear"
|
// animations applied on the header and this necessitates creation of another header
|
||||||
* animations applied on the header and this necessitates creation of another headerview
|
// view to use after the animation. We work around this restriction by returning an
|
||||||
* to use after the animation. We work around this restriction by returning an empty
|
// empty FrameLayout to which the header is attached using #onBindViewHolder method.
|
||||||
* framelayout to which the header is attached using #onBindViewHolder method.
|
|
||||||
*/
|
|
||||||
if (viewType == HEADER_VIEW_TYPE) {
|
if (viewType == HEADER_VIEW_TYPE) {
|
||||||
FrameLayout frameLayout = new FrameLayout(parent.getContext());
|
FrameLayout frameLayout = new FrameLayout(parent.getContext());
|
||||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
|
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
|
||||||
FrameLayout.LayoutParams.MATCH_PARENT,
|
FrameLayout.LayoutParams.MATCH_PARENT,
|
||||||
FrameLayout.LayoutParams.WRAP_CONTENT
|
FrameLayout.LayoutParams.WRAP_CONTENT);
|
||||||
);
|
|
||||||
frameLayout.setLayoutParams(params);
|
frameLayout.setLayoutParams(params);
|
||||||
return new HeaderViewHolder(frameLayout);
|
return new HeaderViewHolder(frameLayout);
|
||||||
} else {
|
} else {
|
|
@ -79,6 +79,10 @@ public class StickyHeaderRecyclerView extends HeaderRecyclerView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call this method when the "sticky" view has changed, so this view can update its internal
|
||||||
|
* states as well.
|
||||||
|
*/
|
||||||
public void updateStickyView() {
|
public void updateStickyView() {
|
||||||
final View header = getHeader();
|
final View header = getHeader();
|
||||||
if (header != null) {
|
if (header != null) {
|
|
@ -63,8 +63,8 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
gingerbreadCompat {
|
gingerbreadCompat {
|
||||||
java.srcDirs = ['eclair-mr1/src', 'full-support/src']
|
java.srcDirs = ['gingerbread/src', 'recyclerview/src']
|
||||||
res.srcDirs = ['eclair-mr1/res', 'full-support/res']
|
res.srcDirs = ['gingerbread/res', 'recyclerview/res']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,11 @@ android.sourceSets {
|
||||||
}
|
}
|
||||||
|
|
||||||
androidTestGingerbreadCompat {
|
androidTestGingerbreadCompat {
|
||||||
java.srcDirs = ['full-support/test/instrumentation/src', 'eclair-mr1/test/instrumentation/src']
|
java.srcDirs = [
|
||||||
res.srcDirs = ['full-support/test/instrumentation/res']
|
'gingerbread/test/instrumentation/src',
|
||||||
|
'recyclerview/test/instrumentation/src'
|
||||||
|
]
|
||||||
|
res.srcDirs = ['recyclerview/test/instrumentation/res']
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
@ -43,7 +46,7 @@ android.sourceSets {
|
||||||
}
|
}
|
||||||
|
|
||||||
testGingerbreadCompat {
|
testGingerbreadCompat {
|
||||||
java.srcDirs = ['eclair-mr1/test/robotest/src', 'full-support/test/robotest/src']
|
java.srcDirs = ['gingerbread/test/robotest/src', 'recyclerview/test/robotest/src']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
android.defaultConfig.testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
android.defaultConfig.testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
|
|