package org.softeg.slartus.forpdaplus;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Handler;
import android.os.Process;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import org.softeg.slartus.forpdaplus.listtemplates.ListCore;
import org.softeg.slartus.forpdaplus.prefs.Preferences;
import org.softeg.slartus.forpdaplus.tabs.TabItem;
import java.util.ArrayList;
import java.util.List;
public class TabDrawerMenu {
private DrawerLayout mDrawerLayout;
private RelativeLayout mDrawer;
private Activity mActivity;
private SelectItemListener mSelectItemListener;
private Resources resources;
private android.support.v7.app.ActionBarDrawerToggle mDrawerToggle;
public static TabAdapter adapter;
private ListView mListView;
private Button closeAll;
private Handler handler = new Handler();
public interface SelectItemListener {
void selectTab(TabItem tabItem);
}
public TabDrawerMenu(Activity activity, SelectItemListener listener) {
resources = App.getInstance().getResources();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
float dpWidth = displayMetrics.widthPixels;
if (dpWidth > displayMetrics.density * 400) {
dpWidth = displayMetrics.density * 400;
}
dpWidth -= 80 * displayMetrics.density;
mActivity = activity;
mSelectItemListener = listener;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
closeAll = (Button) findViewById(R.id.closeAll);
closeAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (App.getInstance().getTabItems().size() > 1)
closeAllTabs();
else {
closeDialog();
toggleOpenState();
}
}
});
closeAll.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
toggleOpenState();
closeDialog();
return false;
}
});
mDrawer = (RelativeLayout) findViewById(R.id.tab_drawer);
mListView = (ListView) findViewById(R.id.tab_list);
mListView.setOnItemClickListener(new TabOnClickListener());
mListView.setStackFromBottom(App.getInstance().getPreferences().getBoolean("tabsBottom", false));
DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawer.getLayoutParams();
params.width = (int) dpWidth;
if ("right".equals(Preferences.System.getDrawerMenuPosition())) {
params.gravity = Gravity.LEFT;
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_start, GravityCompat.START);
} else {
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_end, GravityCompat.END);
}
mDrawer.setLayoutParams(params);
adapter = new TabAdapter(getContext(), R.layout.tab_drawer_item, App.getInstance().getTabItems());
mListView.setAdapter(adapter);
}
public void closeAllTabs() {
close();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
String lastBrick = Preferences.Lists.getLastSelectedList();
List<TabItem> itemsForClose = new ArrayList<>();
for (TabItem item : App.getInstance().getTabItems())
if (!lastBrick.equals(item.getTag()))
itemsForClose.add(item);
((MainActivity) getContext()).removeTabs(itemsForClose);
App.getInstance().setCurrentFragmentTag(lastBrick);
if (!App.getInstance().isContainsByTag(lastBrick)) {
((MainActivity) getContext()).selectItem(ListCore.getRegisteredBrick(lastBrick));
} else {
((MainActivity) getContext()).selectTab(App.getInstance().getTabByTag(lastBrick));
}
refreshAdapter();
notifyDataSetChanged();
}
}, 300);
}
public void toggleOpenState() {
if (mDrawerLayout.isDrawerOpen(mDrawer)) {
mDrawerLayout.closeDrawer(mDrawer);
} else {
mDrawerLayout.openDrawer(mDrawer);
// ((MainActivity)getContext()).hideKeyboard();
}
}
private class TabOnClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectTab((TabItem) adapter.getItem(position));
close();
}
}
private Runnable notifyAdapter = new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
};
public void notifyDataSetChanged() {
handler.postDelayed(notifyAdapter, 300);
}
public void refreshAdapter() {
adapter = new TabAdapter(getContext(), R.layout.tab_drawer_item, App.getInstance().getTabItems());
mListView.setAdapter(adapter);
}
public void removeTab(String tag) {
if (App.getInstance().getTabItems().size() <= 1) {
((MainActivity) getContext()).appExit();
return;
}
for (int i = 0; i <= App.getInstance().getTabItems().size() - 1; i++) {
if (App.getInstance().getTabItems().get(i).getTag().equals(tag)) {
final TabItem tabItem = App.getInstance().getTabByTag(tag);
Log.e("kek", tabItem.getFragment() + " WTF");
tabItem.setFragment(null);
App.getInstance().getTabItems().remove(tabItem);
if (App.getInstance().getTabByTag(tabItem.getParentTag()) != null)
App.getInstance().setCurrentFragmentTag(tabItem.getParentTag());
else if (tag.equals(App.getInstance().getCurrentFragmentTag()))
App.getInstance().setCurrentFragmentTag(App.getInstance().getTabItems().get(App.getInstance().getLastTabPosition(i)).getTag());
((MainActivity) getContext()).showFragment(App.getInstance().getCurrentFragmentTag(), true);
((MainActivity) getContext()).endActionFragment(App.getInstance().getTabByTag(App.getInstance().getCurrentFragmentTag()).getTitle());
((MainActivity) getContext()).getmMainDrawerMenu().setItemCheckable(App.getInstance().getTabByTag(App.getInstance().getCurrentFragmentTag()).getTitle());
refreshAdapter();
return;
}
}
}
public void close() {
mDrawerLayout.closeDrawer(mDrawer);
}
public Boolean isOpen() {
return mDrawerLayout.isDrawerOpen(mDrawer);
}
public void selectTab(TabItem tabItem) {
mSelectItemListener.selectTab(tabItem);
notifyDataSetChanged();
Log.e("kek", "select save");
if (ListCore.getRegisteredBrick(tabItem.getTag()) != null) {
Preferences.Lists.setLastSelectedList(tabItem.getTag());
Preferences.Lists.addLastAction(tabItem.getTag());
}
Log.e("kek", "select save end");
}
private Context getContext() {
return mActivity;
}
private View findViewById(int id) {
return mActivity.findViewById(id);
}
public class TabAdapter extends ArrayAdapter {
final LayoutInflater inflater;
List<TabItem> mObjects = null;
public TabAdapter(Context context, int item_resource, List<TabItem> objects) {
super(context, item_resource, objects);
mObjects = objects;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.tab_drawer_item, parent, false);
holder = new ViewHolder();
assert convertView != null;
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.close = (ImageView) convertView.findViewById(R.id.close);
holder.item = (RelativeLayout) convertView.findViewById(R.id.item);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
TabItem item = mObjects.get(position);
holder.text.setText(item.getTitle());
holder.close.setOnClickListener(new CloseClickListener(item.getTag()));
holder.text.setTextColor(ContextCompat.getColor(App.getContext(), App.getInstance().getDrawerMenuText()));
holder.item.setBackgroundResource(android.R.color.transparent);
if (App.getInstance().getCurrentFragmentTag().equals(item.getTag())) {
holder.text.setTextColor(ContextCompat.getColor(App.getContext(), R.color.selectedItemText));
holder.item.setBackgroundResource(R.color.selectedItem);
}
return convertView;
}
public class ViewHolder {
public TextView text;
public ImageView close;
public RelativeLayout item;
}
}
public class CloseClickListener implements View.OnClickListener {
String tag;
public CloseClickListener(String tag) {
this.tag = tag;
}
public void onClick(View v) {
if (App.getInstance().getTabItems().size() > 1) {
MainActivity.tabLog("Remove tab from drawer");
((MainActivity) getContext()).tryRemoveTab(tag);
} else {
closeDialog();
}
}
}
private void closeDialog() {
new MaterialDialog.Builder(getContext())
.content(R.string.ask_close_app)
.positiveText(R.string.yes)
.negativeText(R.string.no)
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(MaterialDialog materialDialog, DialogAction dialogAction) {
Process.killProcess(Process.myPid());
System.exit(1);
}
})
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(MaterialDialog materialDialog, DialogAction dialogAction) {
close();
}
})
.show();
}
}