package org.itxtech.daedalus.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.itxtech.daedalus.Daedalus;
import org.itxtech.daedalus.R;
import org.itxtech.daedalus.activity.ConfigActivity;
import org.itxtech.daedalus.util.CustomDnsServer;
import org.itxtech.daedalus.util.DnsServerHelper;
/**
* Daedalus Project
*
* @author iTX Technologies
* @link https://itxtech.org
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*/
public class DnsServersFragment extends ToolbarFragment {
private DnsServersFragment.DnsServerAdapter adapter;
private CustomDnsServer server = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_dns_servers, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView_dns_servers);
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(manager);
adapter = new DnsServerAdapter();
recyclerView.setAdapter(adapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof ViewHolder) {
if (DnsServerHelper.isInUsing(Daedalus.configurations.getCustomDnsServers().get(((ViewHolder) viewHolder).getIndex()))) {
return 0;
}
}
return makeMovementFlags(0, ItemTouchHelper.START | ItemTouchHelper.END);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
server = Daedalus.configurations.getCustomDnsServers().get(position);
Daedalus.configurations.getCustomDnsServers().remove(position);
Snackbar.make(view, R.string.action_removed, Snackbar.LENGTH_LONG)
.setAction(R.string.action_undo, new SnackbarClickListener(position)).show();
adapter.notifyItemRemoved(position);
}
});
itemTouchHelper.attachToRecyclerView(recyclerView);
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab_add_server);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), ConfigActivity.class)
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, ConfigActivity.ID_NONE)
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
});
return view;
}
@Override
public void checkStatus() {
menu.findItem(R.id.nav_dns_server).setChecked(true);
toolbar.setTitle(R.string.action_dns_servers);
}
private class SnackbarClickListener implements View.OnClickListener {
private final int position;
private SnackbarClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
Daedalus.configurations.getCustomDnsServers().add(position, server);
adapter.notifyItemInserted(position);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
Daedalus.configurations.save();
adapter = null;
server = null;
}
@Override
public void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
private class DnsServerAdapter extends RecyclerView.Adapter<ViewHolder> {
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
CustomDnsServer server = Daedalus.configurations.getCustomDnsServers().get(position);
holder.setIndex(position);
holder.textViewName.setText(server.getName());
holder.textViewAddress.setText(server.getAddress() + ":" + server.getPort());
}
@Override
public int getItemCount() {
return Daedalus.configurations.getCustomDnsServers().size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_server, parent, false);
return new ViewHolder(view);
}
}
private static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final TextView textViewName;
private final TextView textViewAddress;
private int index;
ViewHolder(View view) {
super(view);
textViewName = (TextView) view.findViewById(R.id.textView_custom_dns_name);
textViewAddress = (TextView) view.findViewById(R.id.textView_custom_dns_address);
view.setOnClickListener(this);
}
void setIndex(int index) {
this.index = index;
}
int getIndex() {
return index;
}
@Override
public void onClick(View v) {
if (!DnsServerHelper.isInUsing(Daedalus.configurations.getCustomDnsServers().get(index))) {
Daedalus.getInstance().startActivity(new Intent(Daedalus.getInstance(), ConfigActivity.class)
.putExtra(ConfigActivity.LAUNCH_ACTION_ID, index)
.putExtra(ConfigActivity.LAUNCH_ACTION_FRAGMENT, ConfigActivity.LAUNCH_FRAGMENT_DNS_SERVER)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
}
}