package com.smartisanos.sidebar.view;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.smartisanos.sidebar.SidebarController;
import com.smartisanos.sidebar.util.BookmarkManager;
import com.smartisanos.sidebar.util.IEmpty;
import com.smartisanos.sidebar.util.LOG;
import com.smartisanos.sidebar.R;
import com.smartisanos.sidebar.util.Utils;
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 java.util.ArrayList;
import java.util.List;
public class BookmarkViewGroup extends RoundCornerFrameLayout implements IEmpty, ContentView.ISubView {
private static final LOG log = LOG.getInstance(BookmarkViewGroup.class);
private Context mContext;
public BookmarkViewGroup(Context context) {
this(context, null);
}
public BookmarkViewGroup(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BookmarkViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public BookmarkViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mContext = context;
}
private ContentView mContentView;
private EmptyView mEmptyView;
private View mContainer;
private ListView mRecentBookmarkList;
private TextView mTitle;
private View mClearList;
private BookmarkAdapter mBookmarkAdapter;
private boolean mIsEmpty = true;
public void setContentView(ContentView cv){
mContentView = cv;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mEmptyView = (EmptyView)findViewById(R.id.empty_view);
mEmptyView.setImageView(R.drawable.bookmark_blank);
mEmptyView.setText(R.string.bookmark_empty_text);
mEmptyView.setHint(R.string.bookmark_empty_hint);
mContainer = findViewById(R.id.bookmark_container);
mTitle = (TextView) findViewById(R.id.title);
mClearList = findViewById(R.id.clear);
mRecentBookmarkList = (ListView)findViewById(R.id.recentbookmark_listview);
mBookmarkAdapter = new BookmarkAdapter(mContext, this);
mRecentBookmarkList.setAdapter(mBookmarkAdapter);
mRecentBookmarkList.setOnItemClickListener(mBookmarkItemClicked);
mClearList.setOnClickListener(mClearListener);
}
private ClearListener mClearListener = new ClearListener(new Runnable() {
@Override
public void run() {
AnimTimeLine timeLine = new AnimTimeLine();
int width = mRecentBookmarkList.getWidth();
Anim moveAnim = new Anim(mRecentBookmarkList, Anim.MOVE, 100, Anim.CUBIC_OUT, new Vector3f(), new Vector3f(width, 0));
Anim alphaAnim = new Anim(BookmarkViewGroup.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) {
mRecentBookmarkList.setTranslationX(0);
BookmarkViewGroup.this.setAlpha(1);
BookmarkViewGroup.this.setVisibility(View.GONE);
BookmarkManager.getInstance(mContext).clear();
}
});
timeLine.start();
SidebarController.getInstance(mContext).resumeTopView();
mContentView.setCurrent(ContentView.ContentType.NONE);
}
}, R.string.title_confirm_delete_bookmark);
@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);
}
}
}
@Override
public void show(boolean anim) {
setVisibility(VISIBLE);
if (anim) {
int time = 200;
AnimTimeLine timeLine = new AnimTimeLine();
if (mIsEmpty) {
int height = mEmptyView.getHeight();
mEmptyView.setPivotY(0);
Anim moveAnim = new Anim(mEmptyView, Anim.TRANSLATE, time, Anim.CUBIC_OUT, new Vector3f(0, -height), new Vector3f());
moveAnim.setListener(new AnimListener() {
@Override
public void onStart() {
}
@Override
public void onComplete(int type) {
mEmptyView.setY(0);
}
});
timeLine.addAnim(moveAnim);
} else {
int height = mRecentBookmarkList.getHeight();
mRecentBookmarkList.setPivotY(0);
Anim moveAnim = new Anim(mRecentBookmarkList, Anim.TRANSLATE, time, Anim.CUBIC_OUT, new Vector3f(0, -height), new Vector3f());
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_BOOKMARK_ANIM, true);
}
@Override
public void onComplete(int type) {
AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_BOOKMARK_ANIM, false);
mRecentBookmarkList.setY(0);
setScaleY(1);
}
});
timeLine.start();
}
}
@Override
public void dismiss(boolean anim) {
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_BOOKMARK_ANIM, true);
}
@Override
public void onComplete(int type) {
AnimStatusManager.getInstance().setStatus(AnimStatusManager.ON_BOOKMARK_ANIM, false);
view.setScaleY(1);
view.setAlpha(1);
setVisibility(View.GONE);
}
});
timeLine.start();
} else {
setVisibility(View.GONE);
}
}
public AdapterView.OnItemClickListener mBookmarkItemClicked = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (position >= 0 && mBookmarkAdapter != null) {
int count = mBookmarkAdapter.getCount();
if (count > position) {
Object obj = mBookmarkAdapter.getItem(position);
if (obj instanceof BookmarkManager.BookmarkItem) {
BookmarkManager.BookmarkItem item = (BookmarkManager.BookmarkItem) obj;
if (item != null && item.content_uri != null) {
try {
Uri uri = Uri.parse(item.content_uri);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(uri);
mContext.startActivity(intent);
Utils.resumeSidebar(mContext);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
};
private void updateUI() {
mTitle.setText(R.string.title_bookmark);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
updateUI();
mClearListener.onConfigurationChanged(newConfig);
}
}