package com.forfan.bigbang.component.activity.searchengine;
import android.app.Activity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import com.forfan.bigbang.R;
import com.forfan.bigbang.component.activity.searchengine.listener.OnItemClickListener;
import com.forfan.bigbang.component.activity.searchengine.view.ListViewDecoration;
import com.forfan.bigbang.component.base.BaseActivity;
import com.forfan.bigbang.entity.SearchEngine;
import com.forfan.bigbang.util.ConstantUtil;
import com.forfan.bigbang.util.SearchEngineUtil;
import com.forfan.bigbang.util.SnackBarUtil;
import com.forfan.bigbang.util.UrlCountUtil;
import com.forfan.bigbang.view.Dialog;
import com.forfan.bigbang.view.DialogFragment;
import com.forfan.bigbang.view.SimpleDialog;
import com.shang.commonjar.contentProvider.SPHelper;
import com.shang.utils.StatusBarCompat;
import com.yanzhenjie.recyclerview.swipe.Closeable;
import com.yanzhenjie.recyclerview.swipe.OnSwipeMenuItemClickListener;
import com.yanzhenjie.recyclerview.swipe.SwipeMenu;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;
import com.yanzhenjie.recyclerview.swipe.touch.OnItemMoveListener;
import java.util.ArrayList;
import java.util.Collections;
/**
* Created by wangyan-pd on 2016/11/19.
*/
public class SearchEngineActivity extends BaseActivity {
private Activity mContext;
private ArrayList<SearchEngine> searchEngines;
private MenuAdapter mMenuAdapter;
private LinearLayoutManager mLinearLayoutManager;
private SwipeMenuRecyclerView swipeMenuRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StatusBarCompat.setupStatusBarView(this, (ViewGroup) getWindow().getDecorView(), true, R.color.colorPrimary);
setContentView(R.layout.activity_search_engine);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.setting_search_engine);
mContext = this;
searchEngines = SearchEngineUtil.getInstance().getSearchEngines();
swipeMenuRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.recyclerview);
mLinearLayoutManager = new LinearLayoutManager(this);
swipeMenuRecyclerView.setLayoutManager(mLinearLayoutManager);// 布局管理器。
swipeMenuRecyclerView.setHasFixedSize(true);// 如果Item够简单,高度是确定的,打开FixSize将提高性能。
swipeMenuRecyclerView.setItemAnimator(new DefaultItemAnimator());// 设置Item默认动画,加也行,不加也行。
swipeMenuRecyclerView.addItemDecoration(new ListViewDecoration());// 添加分割线。
// 为SwipeRecyclerView的Item创建菜单就两句话,不错就是这么简单:
// 设置菜单创建器。
swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);
// 设置菜单Item点击监听。
swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
mMenuAdapter = new MenuAdapter(searchEngines);
mMenuAdapter.setOnItemClickListener(onItemClickListener);
swipeMenuRecyclerView.setAdapter(mMenuAdapter);
swipeMenuRecyclerView.setLongPressDragEnabled(true);// 开启拖拽,就这么简单一句话。
swipeMenuRecyclerView.setOnItemMoveListener(onItemMoveListener);// 监听拖拽,更新UI。
findViewById(R.id.add_search).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UrlCountUtil.onEvent(UrlCountUtil.CLICK_SEARCH_ENGINE_ADD);
showAddSearchEngineDialog();
}
});
}
private void showAddSearchEngineDialog() {
SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) {
public EditText editName;
public EditText editUrl;
@Override
protected void onBuildDone(Dialog dialog) {
super.onBuildDone(dialog);
dialog.layoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
editName = (EditText) dialog.findViewById(R.id.search_name);
editUrl = (EditText) dialog.findViewById(R.id.search_url);
}
@Override
public void onPositiveActionClicked(DialogFragment fragment) {
// 这里是保持开启
if (TextUtils.isEmpty(editName.getText().toString()) || TextUtils.isEmpty(editUrl.getText().toString())) {
SnackBarUtil.show(swipeMenuRecyclerView,getResources().getString(R.string.save_search_engine_fail));
return;
}
SearchEngineUtil.getInstance().addSearchEngine(new SearchEngine(editName.getText().toString(), editUrl.getText().toString()));
mMenuAdapter.notifyDataSetChanged();
SearchEngineUtil.getInstance().save(searchEngines);
super.onPositiveActionClicked(fragment);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onCancel(dialog);
}
};
builder.contentView(R.layout.search_engine_edit);
builder.title(getResources().getString(R.string.add));
builder.positiveAction(this.getString(R.string.confirm));
builder.negativeAction(getString(R.string.cancel));
DialogFragment fragment = DialogFragment.newInstance(builder);
fragment.show(getSupportFragmentManager(), null);
}
/**
* 当Item移动的时候。
*/
private OnItemMoveListener onItemMoveListener = new OnItemMoveListener() {
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// 当Item被拖拽的时候。
Collections.swap(searchEngines, fromPosition, toPosition);
mMenuAdapter.notifyItemMoved(fromPosition, toPosition);
SearchEngineUtil.getInstance().save(searchEngines);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
@Override
public void onItemDismiss(int position) {
// 当Item被滑动删除掉的时候,在这里是无效的,因为这里没有启用这个功能。
// 使用Menu时就不用使用这个侧滑删除啦,两个是冲突的。
}
};
/**
* 菜单创建器。
*/
private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {
@Override
public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {
int width = getResources().getDimensionPixelSize(R.dimen.item_height);
// MATCH_PARENT 自适应高度,保持和内容一样高;也可以指定菜单具体高度,也可以用WRAP_CONTENT。
int height = ViewGroup.LayoutParams.MATCH_PARENT;
// 添加右侧的,如果不添加,则右侧不会出现菜单。
{
SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)
// .setBackgroundDrawable(R.drawable.selector_red)
// .setImage(R.mipmap.ic_action_delete)
.setBackgroundColor(Color.parseColor("#ff6e40"))
.setText(getString(R.string.delete)) // 文字,还可以设置文字颜色,大小等。。
.setTextColor(Color.WHITE)
.setWidth(width)
.setHeight(height);
swipeRightMenu.addMenuItem(deleteItem);// 添加一个按钮到右侧侧菜单。
SwipeMenuItem addItem = new SwipeMenuItem(mContext)
// .setBackgroundDrawable(R.drawable.selector_green)
.setBackgroundColor(Color.parseColor("#5af158"))
.setText(getString(R.string.edit))
.setTextColor(Color.WHITE)
.setWidth(width)
.setHeight(height);
swipeRightMenu.addMenuItem(addItem); // 添加一个按钮到右侧菜单。
}
}
};
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(int position) {
SPHelper.save(ConstantUtil.BROWSER_SELECTION, position);
SnackBarUtil.show(swipeMenuRecyclerView,getString(R.string.set_search_pre)+ searchEngines.get(position).title+getString(R.string.set_search_end));
mMenuAdapter.notifyDataSetChanged();
}
};
/**
* 菜单点击监听。
*/
private OnSwipeMenuItemClickListener menuItemClickListener = new OnSwipeMenuItemClickListener() {
@Override
public void onItemClick(Closeable closeable, int adapterPosition, int menuPosition, int direction) {
closeable.smoothCloseMenu();// 关闭被点击的菜单。
switch (menuPosition) {
case 0:
if (searchEngines.size() == 1) {
SnackBarUtil.show(swipeMenuRecyclerView, getString(R.string.can_not_delete));
return;
}
UrlCountUtil.onEvent(UrlCountUtil.CLICK_SEARCH_ENGINE_DEL);
mMenuAdapter.notifyItemRemoved(adapterPosition);
searchEngines.remove(adapterPosition);
if (SPHelper.getInt(ConstantUtil.BROWSER_SELECTION, 0) == adapterPosition) {
SPHelper.save(ConstantUtil.BROWSER_SELECTION, 0);
}
SearchEngineUtil.getInstance().save(searchEngines);
break;
case 1:
UrlCountUtil.onEvent(UrlCountUtil.CLICK_SEARCH_ENGINE_EDIT);
showEidtSearchEngineDialog(adapterPosition);
break;
}
//
// if (direction == SwipeMenuRecyclerView.RIGHT_DIRECTION) {
// Toast.makeText(mContext, "list第" + adapterPosition + "; 右侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show();
// } else if (direction == SwipeMenuRecyclerView.LEFT_DIRECTION) {
// Toast.makeText(mContext, "list第" + adapterPosition + "; 左侧菜单第" + menuPosition, Toast.LENGTH_SHORT).show();
// }
}
};
private void showEidtSearchEngineDialog(int adapterPosition) {
SearchEngine searchEngine = searchEngines.get(adapterPosition);
SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) {
public EditText editName;
public EditText editUrl;
@Override
protected void onBuildDone(Dialog dialog) {
super.onBuildDone(dialog);
dialog.layoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
editName = (EditText) dialog.findViewById(R.id.search_name);
editUrl = (EditText) dialog.findViewById(R.id.search_url);
editName.setText(searchEngine.title);
editName.setSelection(searchEngine.title.length());
editUrl.setText(searchEngine.url);
}
@Override
public void onPositiveActionClicked(DialogFragment fragment) {
// 这里是保持开启
if (TextUtils.isEmpty(editName.getText().toString()) || TextUtils.isEmpty(editUrl.getText().toString())) {
SnackBarUtil.show(swipeMenuRecyclerView, getString(R.string.save_search_engine_fail));
return;
}
searchEngine.url = editUrl.getText().toString();
searchEngine.title = editName.getText().toString();
mMenuAdapter.notifyDataSetChanged();
SearchEngineUtil.getInstance().save(searchEngines);
super.onPositiveActionClicked(fragment);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onCancel(dialog);
}
};
builder.contentView(R.layout.search_engine_edit);
builder.title(getString(R.string.xiugai));
builder.positiveAction(this.getString(R.string.confirm));
builder.negativeAction(getString(R.string.cancel));
DialogFragment fragment = DialogFragment.newInstance(builder);
fragment.show(getSupportFragmentManager(), null);
}
}