package com.smartisanos.sidebar.view; import com.smartisanos.sidebar.R; import com.smartisanos.sidebar.SidebarController; import com.smartisanos.sidebar.util.IEmpty; import com.smartisanos.sidebar.util.LOG; import com.smartisanos.sidebar.util.RecentFileManager; import com.smartisanos.sidebar.util.Tracker; import com.smartisanos.sidebar.util.anim.Anim; import com.smartisanos.sidebar.util.anim.AnimListener; import com.smartisanos.sidebar.util.anim.AnimStatusManager; import com.smartisanos.sidebar.util.anim.AnimTimeLine; import com.smartisanos.sidebar.util.anim.Vector3f; import com.smartisanos.sidebar.view.ContentView.ContentType; import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; import android.view.View; import android.widget.ListView; import android.widget.TextView; public class RecentFileViewGroup extends RoundCornerFrameLayout implements IEmpty, ContentView.ISubView { private static final LOG log = LOG.getInstance(RecentFileViewGroup.class); private ContentView mContentView; private EmptyView mEmptyView; private View mContainer; private ListView mRecentFileList; private TextView mTitle; private View mClearFile; private RecentFileAdapter mRecentFileAdapter; private boolean mIsEmpty = true; public RecentFileViewGroup(Context context) { this(context, null); } public RecentFileViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RecentFileViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } public RecentFileViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onFinishInflate() { super.onFinishInflate(); mEmptyView = (EmptyView)findViewById(R.id.empty_view); mEmptyView.setImageView(R.drawable.file_blank); mEmptyView.setText(R.string.file_empty_text); mEmptyView.setHint(R.string.file_empty_hint); mContainer = findViewById(R.id.file_container); mTitle = (TextView) findViewById(R.id.title); mClearFile = findViewById(R.id.clear); mRecentFileList = (ListView)findViewById(R.id.recentfile_listview); mRecentFileAdapter = new RecentFileAdapter(mContext, this); mRecentFileList.setAdapter(mRecentFileAdapter); mClearFile.setOnClickListener(mClearListener); updateUI(); } private ClearListener mClearListener = new ClearListener(new Runnable() { @Override public void run() { AnimTimeLine timeLine = new AnimTimeLine(); int width = mRecentFileList.getWidth(); Anim moveAnim = new Anim(mRecentFileList, Anim.MOVE, 100, Anim.CUBIC_OUT, new Vector3f(), new Vector3f(width, 0)); Anim alphaAnim = new Anim(RecentFileViewGroup.this, Anim.TRANSPARENT, 200, Anim.CUBIC_OUT, new Vector3f(0, 0, 1), new Vector3f()); timeLine.addAnim(moveAnim); timeLine.addAnim(alphaAnim); timeLine.setAnimListener(new AnimListener() { @Override public void onStart() { } @Override public void onComplete(int type) { mRecentFileList.setTranslationX(0); RecentFileViewGroup.this.setAlpha(1); RecentFileViewGroup.this.setVisibility(View.GONE); RecentFileManager.getInstance(mContext).clear(); Tracker.onClick(Tracker.EVENT_MAKESURE_CLEAN, "source", "1"); } }); timeLine.start(); SidebarController.getInstance(mContext).resumeTopView(); mContentView.setCurrent(ContentType.NONE); } }, R.string.title_confirm_delete_history_file); public void setContentView(ContentView cv){ mContentView = cv; } @Override public void setEmpty(boolean isEmpty) { if (mIsEmpty != isEmpty) { mIsEmpty = isEmpty; if (mIsEmpty) { mContainer.setVisibility(GONE); mEmptyView.setVisibility(VISIBLE); } else { mContainer.setVisibility(VISIBLE); mEmptyView.setVisibility(GONE); } } } public void show(boolean anim) { Tracker.onClick(Tracker.EVENT_TOPBAR, "type", "1"); RecentFileManager.getInstance(mContext).startSearchFile(); mRecentFileList.setSelectionAfterHeaderView(); mRecentFileList.requestLayout(); post(new Runnable() { @Override public void run() { RecentFileManager.getInstance(mContext).refresh(); } }); setVisibility(VISIBLE); if (anim) { int time = 180; AnimTimeLine timeLine = new AnimTimeLine(); final View view; if (mIsEmpty) { view = mEmptyView; } else { view = mRecentFileList; } int height = view.getHeight(); view.setPivotY(0); Anim moveAnim = new Anim(view, Anim.MOVE, time, Anim.CUBIC_OUT, new Vector3f(0, -height / 2), new Vector3f()); moveAnim.setListener(new AnimListener() { @Override public void onStart() { } @Override public void onComplete(int type) { view.setTranslationY(0); } }); timeLine.addAnim(moveAnim); setPivotY(0); Anim scaleAnim = new Anim(this, Anim.SCALE, time, Anim.CUBIC_OUT, new Vector3f(0, 0.6f), new Vector3f(0, 1)); timeLine.addAnim(scaleAnim); timeLine.setAnimListener(new AnimListener() { @Override public void onStart() { AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_FILE_LIST_ANIM, true); } @Override public void onComplete(int type) { AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_FILE_LIST_ANIM, false); setScaleY(1); } }); timeLine.start(); } } public void dismiss(boolean anim) { mClearListener.dismiss(); if (anim) { AnimTimeLine timeLine = new AnimTimeLine(); final View view; if (mIsEmpty) { view = mEmptyView; } else { view = mContainer; } int time = 200; view.setPivotY(0); Anim alphaAnim = new Anim(view, Anim.TRANSPARENT, time, Anim.CUBIC_OUT, new Vector3f(0, 0, 1), new Vector3f()); Anim scaleAnim = new Anim(view, Anim.SCALE, time, Anim.CUBIC_OUT, new Vector3f(1, 1), new Vector3f(1, 0.6f)); timeLine.addAnim(alphaAnim); timeLine.addAnim(scaleAnim); timeLine.setAnimListener(new AnimListener() { @Override public void onStart() { AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_FILE_LIST_ANIM, true); } @Override public void onComplete(int type) { AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_FILE_LIST_ANIM, false); view.setScaleY(1); view.setAlpha(1); setVisibility(View.GONE); mRecentFileAdapter.shrink(); } }); timeLine.start(); } else { setVisibility(View.GONE); } } private void updateUI(){ mTitle.setText(R.string.title_file); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); updateUI(); mClearListener.onConfigurationChanged(newConfig); } }