package com.mixpanel.android.viewcrawler;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class TestView extends FrameLayout {
public TestView(Context context) {
super(context);
mAllViews = new HashSet<View>();
mAllViews.add(this);
mSecondLayer = new HashSet<View>();
mThirdLayer = new HashSet<View>();
mFourthLayer = new HashSet<View>();
setId(ROOT_ID);
setTag(CRAZY_TAG);
setContentDescription(ROOT_DESCRIPTION);
ViewGroup linear = new LinearLayout(getContext());
linear.setId(LINEAR_ID);
addView(linear);
mAllViews.add(linear);
mSecondLayer.add(linear);
mTextView1 = new TextView(getContext());
mTextView1.setId(TEXT_VIEW_ID);
mTextView1.setTag(CRAZY_TAG);
linear.addView(mTextView1);
mAllViews.add(mTextView1);
mThirdLayer.add(mTextView1);
mTextView2 = new TextView(getContext());
mTextView2.setId(TEXT2_VIEW_ID);
mTextView2.setText("Original Text");
mTextView2.setTag(SIMPLE_TAG);
mTextView2.setContentDescription(TEXT_2_CONTENT_DESCRIPTION);
linear.addView(mTextView2);
mAllViews.add(mTextView2);
mThirdLayer.add(mTextView2);
mButtonGroup = new LinearLayout(getContext());
mButtonGroup.setId(BUTTON_GROUP_ID);
linear.addView(mButtonGroup);
mAllViews.add(mButtonGroup);
mThirdLayer.add(mButtonGroup);
mAdHocButton1 = new AdHocButton1(getContext());
mAdHocButton1.setTag(SIMPLE_TAG);
mAdHocButton1.setText("{Hi!}");
mAdHocButton1.setContentDescription(BUTTON_1_CONTENT_DESCRIPTION);
mButtonGroup.addView(mAdHocButton1);
mAllViews.add(mAdHocButton1);
mFourthLayer.add(mAdHocButton1);
mAdHocButton2 = new AdHocButton2(getContext());
mAdHocButton2.setText("Hello \" There");
mButtonGroup.addView(mAdHocButton2);
mAllViews.add(mAdHocButton2);
mFourthLayer.add(mAdHocButton2);
mAdHocButton3 = new AdHocButton3(getContext());
mAdHocButton2.setText("Howdy: ]");
mAdHocButton3.setId(BUTTON_ID);
mButtonGroup.addView(mAdHocButton3);
mAdHocButton1.setContentDescription(BUTTON_3_CONTENT_DESCRIPTION);
mAllViews.add(mAdHocButton3);
mFourthLayer.add(mAdHocButton3);
mImageView = new ImageView(getContext());
mImageView.setId(IMAGE_VIEW_ID);
mImageView.setImageResource(android.R.drawable.btn_star_big_off);
linear.addView(mImageView);
mAllViews.add(mImageView);
mThirdLayer.add(mImageView);
mButtonParentView = mButtonGroup;
ViewGroup relative = new RelativeLayout(getContext());
relative.setId(RELATIVE_LAYOUT_ID);
addView(relative);
mAllViews.add(relative);
mSecondLayer.add(relative);
mRelativeLayoutButton1 = new Button(getContext());
mRelativeLayoutButton1.setText("Yo!");
mRelativeLayoutButton1.setId(RELATIVE_LAYOUT_BUTTON1_ID);
relative.addView(mRelativeLayoutButton1);
mAllViews.add(mRelativeLayoutButton1);
mThirdLayer.add(mRelativeLayoutButton1);
mRelativeLayoutButton2 = new Button(getContext());
mRelativeLayoutButton2.setText("Yeah!");
mRelativeLayoutButton2.setId(RELATIVE_LAYOUT_BUTTON2_ID);
relative.addView(mRelativeLayoutButton2);
mAllViews.add(mRelativeLayoutButton2);
mThirdLayer.add(mRelativeLayoutButton2);
mViewsByHashcode = new HashMap<Integer, View>();
for (View v:mAllViews) {
mViewsByHashcode.put(v.hashCode(), v);
}
}
public int viewCount() {
return 1 + mSecondLayer.size() + mThirdLayer.size() + mFourthLayer.size();
}
public interface CustomPropButton {
public CharSequence getCustomProperty();
public void setCustomProperty(CharSequence s);
}
public static class AdHocButton1 extends Button implements CustomPropButton {
public AdHocButton1(Context context) {
super(context);
}
public CharSequence getCustomProperty() {
return SIMPLE_TAG;
}
public void setCustomProperty(CharSequence s) {
; // OK
}
// This is a HACK- it's actually an override of a secret/public method of View.
// It's added here so that we can test accessibilityDelegate tracking without
// doing a lot of puzzling and unreliable functional tests.
public boolean includeForAccessibility() {
return true;
}
}
public static class AdHocButton2 extends Button {
public AdHocButton2(Context context) {
super(context);
}
public void setCountingProperty(Object o) {
countingPropertyValue = o;
countingPropertyCount++;
}
public Object getCountingProperty() {
return countingPropertyValue;
}
// This is a HACK- it's actually an override of a secret/public method of View.
// It's added here so that we can test accessibilityDelegate tracking without
// doing a lot of puzzling and unreliable functional tests.
public boolean includeForAccessibility() {
return true;
}
public Object countingPropertyValue = null;
public int countingPropertyCount = 0;
}
public static class AdHocButton3 extends Button implements CustomPropButton {
public AdHocButton3(Context context) {
super(context);
}
public CharSequence getCustomProperty() {
throw new RuntimeException("BANG!");
}
public void setCustomProperty(CharSequence s) {
throw new RuntimeException("BANG!");
}
// This is a HACK- it's actually an override of a secret/public method of View.
// It's added here so that we can test accessibilityDelegate tracking without
// doing a lot of puzzling and unreliable functional tests.
public boolean includeForAccessibility() {
return true;
}
}
public static class MockOnLayoutErrorListener implements ViewVisitor.OnLayoutErrorListener {
public MockOnLayoutErrorListener() {
errorList = new ArrayList<ViewVisitor.LayoutErrorMessage>();
}
public void onLayoutError(ViewVisitor.LayoutErrorMessage e) {
errorList.add(e);
}
public List<ViewVisitor.LayoutErrorMessage> errorList;
}
public final Set<View> mAllViews;
public final View mButtonParentView;
public final ViewGroup mButtonGroup;
public final TextView mTextView1;
public final TextView mTextView2;
public final AdHocButton1 mAdHocButton1;
public final AdHocButton2 mAdHocButton2;
public final AdHocButton3 mAdHocButton3;
public final ImageView mImageView;
public final Button mRelativeLayoutButton1;
public final Button mRelativeLayoutButton2;
public final Set<View> mSecondLayer;
public final Set<View> mThirdLayer;
public final Set<View> mFourthLayer;
public final Map<Integer, View> mViewsByHashcode;
public static final int ROOT_ID = 1000;
public static final int BUTTON_ID = 2000;
public static final int TEXT_VIEW_ID = 3000;
public static final int TEXT2_VIEW_ID = 3500;
public static final int LINEAR_ID = 4000;
public static final int BUTTON_GROUP_ID = 5000;
public static final int RELATIVE_LAYOUT_ID = 6000;
public static final int RELATIVE_LAYOUT_BUTTON1_ID = 7000;
public static final int RELATIVE_LAYOUT_BUTTON2_ID = 8000;
public static final int IMAGE_VIEW_ID = 9000;
public static final String SIMPLE_TAG = "this_is_a_simple_tag";
public static final String CRAZY_TAG = "this is a long and \"CRAZY\" \\\"Tag";
public static final String ROOT_DESCRIPTION = "This is the root view";
public static final String TEXT_2_CONTENT_DESCRIPTION = "The Second Test Text View";
public static final String BUTTON_1_CONTENT_DESCRIPTION = "Ad Hoc Button Number 1";
public static final String BUTTON_3_CONTENT_DESCRIPTION = "Ad Hoc Button Number 3";
public static final int NO_ANCHOR = 0;
}