package com.marshalchen.common.demoofui; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.marshalchen.common.demoofui.cooldraganddrop.CoolDragAndDropActivity; import com.marshalchen.common.demoofui.materialAnimations.MaterialAnimationActivity; import com.marshalchen.common.demoofui.materialdesigndemo.MaterialDesignActivity; import com.marshalchen.common.demoofui.materialmenu.MaterialMenuToolbarActivity; import com.marshalchen.common.demoofui.sampleModules.FloatingActionButtonDemo; import com.marshalchen.common.demoofui.sampleModules.GestureTouchActivity; import com.marshalchen.common.demoofui.sampleModules.KenBurnsViewActivity; import com.marshalchen.common.demoofui.sampleModules.MaterialListViewActivity; import com.marshalchen.common.demoofui.sampleModules.MotionSampleActivity; import com.marshalchen.common.demoofui.sampleModules.NumberProgressBarActivity; import com.marshalchen.common.demoofui.sampleModules.RippleEffectActivity; import com.marshalchen.common.demoofui.sampleModules.SearchDrawableActivity; import com.marshalchen.common.demoofui.sampleModules.SignaturePadActivity; import com.marshalchen.common.demoofui.ultimaterecyclerview.UltimateRecyclerViewActivity; import com.marshalchen.common.ui.Typefaces; import com.marshalchen.common.uimodule.enhanceListView.EnhancedListView; import com.marshalchen.common.uimodule.titanic.Titanic; import com.marshalchen.common.uimodule.titanic.TitanicTextView; import com.marshalchen.common.uimodule.viewpagerindicator.CirclePageIndicator; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import butterknife.ButterKnife; import butterknife.InjectView; public class LandingFragment extends Fragment { View mainView; @InjectView(R.id.landingEnhanceListView) EnhancedListView landingEnhanceListView; List<Map<String, ?>> enhanceList; EnhancedListAdapter enhancedListAdapter; @InjectView(R.id.landingMallViewpager) ViewPager landingMallViewpager; CirclePageIndicator landingMallViewPagerIndicator; private List<View> viewpagerList = new ArrayList<View>(); Titanic titanic; @InjectView(R.id.titanicTextView) TitanicTextView titanicTextView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mainView = inflater .inflate(R.layout.landing_fragment, container, false); ButterKnife.inject(this, mainView); initTitanicView(); initEnhanceList(); initViewPager(); // CryptoUtils.testCrypto(getActivity()); return mainView; } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.reset(this); } private void initTitanicView() { titanic = new Titanic(); titanic.start(titanicTextView); titanicTextView.setTypeface(Typefaces.get(getActivity(), "Satisfy-Regular.ttf")); // HandlerUtils.sendMessageHandlerDelay(titanicHandler, 0, 3000); } Handler titanicHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); titanic.cancel(); landingEnhanceListView.setVisibility(View.VISIBLE); } }; private void initEnhanceList() { enhanceList = getData("com.marshalchen.common.demoofui.sampleModules"); enhancedListAdapter = new EnhancedListAdapter(enhanceList); landingEnhanceListView.setAdapter(enhancedListAdapter); landingEnhanceListView .setDismissCallback(new EnhancedListView.OnDismissCallback() { @Override public EnhancedListView.Undoable onDismiss( EnhancedListView listView, int position) { enhancedListAdapter.remove(position); return null; } }); landingEnhanceListView.setSwipingLayout(R.id.swiping_layout); landingEnhanceListView.setUndoStyle(null); landingEnhanceListView.enableSwipeToDismiss(); landingEnhanceListView .setSwipeDirection(EnhancedListView.SwipeDirection.START); landingEnhanceListView .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = (Intent) enhanceList.get(position).get("intent"); startActivity(intent); // TODO add OnItemClick event } }); } protected List<Map<String, ?>> getData(String prefix) { List<Map<String, ?>> myData = new ArrayList<Map<String, ?>>(); Intent intent = new Intent("com.marshalchen.common.demoofui", null); PackageManager pm = getActivity().getPackageManager(); List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); if (null == list) return myData; int len = list.size(); for (int i = 0; i < len; i++) { ResolveInfo info = list.get(i); String activityName = info.activityInfo.name; String[] labelPath = activityName.split("\\."); String nextLabel = labelPath[labelPath.length - 1]; addItem(myData, nextLabel, activityIntent( info.activityInfo.applicationInfo.packageName, info.activityInfo.name)); } Collections.sort(myData, sDisplayNameComparator); addItemToTop(myData, "SignaturePadActivity", new Intent(getActivity(), SignaturePadActivity.class)); addItemToTop(myData, "SmoothProgressBarActivity", new Intent(getActivity(), SmoothProgressBarActivity.class)); addItemToTop(myData, "RippleEffectActivity", new Intent(getActivity(), RippleEffectActivity.class)); addItemToTop(myData, "NumberProgressBarActivity", new Intent(getActivity(), NumberProgressBarActivity.class)); addItemToTop(myData, "MotionSampleActivity", new Intent(getActivity(), MotionSampleActivity.class)); addItemToTop(myData, "MaterialMenuToolbarActivity", new Intent(getActivity(), MaterialMenuToolbarActivity.class)); // addItemToTop(myData, // "MaterialListViewActivity", // new Intent(getActivity(), MaterialListViewActivity.class)); addItemToTop(myData, "KenBurnsViewActivity", new Intent(getActivity(), KenBurnsViewActivity.class)); addItemToTop(myData, "GestureTouchActivity", new Intent(getActivity(), GestureTouchActivity.class)); addItemToTop(myData, "FloatingActionButtonDemo", new Intent(getActivity(), FloatingActionButtonDemo.class)); addItemToTop(myData, "CoolDragAndDropActivity", new Intent(getActivity(), CoolDragAndDropActivity.class)); addItemToTop(myData, "MaterialDesignActivity", new Intent(getActivity(), MaterialDesignActivity.class)); addItemToTop(myData, "MaterialAnimationActivity", new Intent(getActivity(), MaterialAnimationActivity.class)); addItemToTop(myData, "SearchDrawableActivity", new Intent(getActivity(), SearchDrawableActivity.class)); addItemToTop(myData, "UltimateRecyclerViewActivity", new Intent(getActivity(), UltimateRecyclerViewActivity.class)); return myData; } private final static Comparator<Map<String, ?>> sDisplayNameComparator = new Comparator<Map<String, ?>>() { private final Collator collator = Collator.getInstance(); public int compare(Map<String, ?> map1, Map<String, ?> map2) { return collator.compare(map1.get("title"), map2.get("title")); } }; protected Intent activityIntent(String pkg, String componentName) { Intent result = new Intent(); result.setClassName(pkg, componentName); return result; } protected void addItem(List<Map<String, ?>> data, String name, Intent intent) { Map<String, Object> temp = new HashMap<String, Object>(); temp.put("title", name); temp.put("intent", intent); data.add(temp); } protected void addItemToTop(List<Map<String, ?>> data, String name, Intent intent) { Map<String, Object> temp = new HashMap<String, Object>(); temp.put("title", name); temp.put("intent", intent); data.add(0, temp); } private void initViewPager() { addLandingViewPager(); landingMallViewpager.setAdapter(new CustomViewPagerAdapter( viewpagerList)); landingMallViewpager .setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { } @Override public void onPageScrollStateChanged(int i) { // setCurrentDot(i); } }); landingMallViewPagerIndicator = (CirclePageIndicator) mainView .findViewById(R.id.landingMallViewPagerIndicator); landingMallViewPagerIndicator.setViewPager(landingMallViewpager); // final float density = getResources().getDisplayMetrics().density; // landingMallViewPagerIndicator.setBackgroundColor(0xffffff); // landingMallViewPagerIndicator.setRadius(5 * density); // landingMallViewPagerIndicator.setPageColor(getResources().getColor(R.color.black)); // landingMallViewPagerIndicator.setFillColor(getResources().getColor(R.color.white)); // landingMallViewPagerIndicator.setStrokeColor(getResources().getColor(R.color.black)); // landingMallViewPagerIndicator.setStrokeWidth(1 * 1.0f); } private class EnhancedListAdapter extends BaseAdapter { // private List<String> mItems = new ArrayList<String>(); private List<Map<String, ?>> mLists = new ArrayList<>(); // private EnhancedListAdapter(List<String> mItems) { // this.mItems = mItems; // } private EnhancedListAdapter(List<Map<String, ?>> mLists) { this.mLists = mLists; } void resetItems() { mLists.clear(); } public void remove(int position) { mLists.remove(position); notifyDataSetChanged(); } /** * How many items are in the data set represented by this Adapter. * * @return Count of items. */ @Override public int getCount() { return mLists.size(); } /** * Get the data item associated with the specified position in the data * set. * * @param position Position of the item whose data we want within the * adapter's data set. * @return The data at the specified position. */ @Override public Object getItem(int position) { return mLists.get(position); } /** * Get the row id associated with the specified position in the list. * * @param position The position of the item within the adapter's data set * whose row id we want. * @return The id of the item at the specified position. */ @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = getActivity().getLayoutInflater().inflate( R.layout.list_item_enhance, parent, false); // Clicking the delete icon, will read the position of the item // stored in // the tag and delete it from the list. So we don't need to // generate a new // onClickListener every time the content of this view changes. final View origView = convertView; convertView.findViewById(R.id.action_delete) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // listViewHistory.delete(((ViewHolder) // origView.getTag()).position); } }); holder = new ViewHolder(); assert convertView != null; holder.mTextView = (TextView) convertView .findViewById(R.id.reacolhistextview); // holder.reacolReaLyout = (RelativeLayout) // convertView.findViewById(R.id.reacolReaLyout); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.mTextView.setText(mLists.get(position).get("title") .toString()); return convertView; } private class ViewHolder { TextView mTextView; } } private void addLandingViewPager() { if (viewpagerList == null) viewpagerList = new ArrayList<View>(); else viewpagerList.clear(); for (int i = 0; i < 3; i++) { View viewPagerItem = getActivity().getLayoutInflater().inflate( R.layout.landing_viewpager_item, null, false); ViewPagerViewHolder viewHolder = new ViewPagerViewHolder( viewPagerItem); viewHolder.landViewPagerImage.setImageResource(R.drawable.test); // viewHolder.landViewPagerInfo1.setText("hh"+i); // viewPagerItem.setTag(viewHolder); viewpagerList.add(viewPagerItem); } } static class ViewPagerViewHolder { @InjectView(R.id.landViewPagerImage) ImageView landViewPagerImage; @InjectView(R.id.landViewPagerImage1) ImageView landViewPagerImage1; @InjectView(R.id.landViewPagerName) TextView landViewPagerName; @InjectView(R.id.landViewPagerName1) TextView landViewPagerName1; @InjectView(R.id.landViewPagerInfo) TextView landViewPagerInfo; @InjectView(R.id.landViewPagerInfo1) TextView landViewPagerInfo1; public ViewPagerViewHolder(View view) { ButterKnife.inject(this, view); } } class CustomViewPagerAdapter extends PagerAdapter { List<View> viewpagerList; public CustomViewPagerAdapter(List<View> viewpagerList) { this.viewpagerList = viewpagerList; } @Override public int getCount() { return viewpagerList.size(); } @Override public boolean isViewFromObject(View view, Object o) { return view == (o); } @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); if (viewpagerList != null && viewpagerList.size() > position && viewpagerList.get(position) != null) container.removeView(viewpagerList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewpagerList.get(position), 0); viewpagerList.get(position).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getActivity(), MaterialActivity.class); startActivity(intent); } }); // return super.instantiateItem(container, position); return viewpagerList.get(position); } @Override public void startUpdate(ViewGroup container) { super.startUpdate(container); } @Override public void restoreState(Parcelable state, ClassLoader loader) { super.restoreState(state, loader); } @Override public Parcelable saveState() { return super.saveState(); } } }