package treehou.se.habit.ui.servers; import android.os.Bundle; import android.support.annotation.IntDef; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import treehou.se.habit.HabitApplication; import treehou.se.habit.R; import treehou.se.habit.ui.adapter.ImageItem; import treehou.se.habit.ui.adapter.ImageItemAdapter; import treehou.se.habit.ui.bindings.BindingsFragment; import treehou.se.habit.ui.inbox.InboxListFragment; import treehou.se.habit.ui.servers.sitemaps.SitemapSelectFragment; import treehou.se.habit.ui.sitemaps.SitemapListFragment; public class ServerMenuFragment extends Fragment { private static final String ARG_SERVER = "arg_server"; private Unbinder unbinder; private long serverId; private ViewGroup container; @Retention(RetentionPolicy.SOURCE) @IntDef ({ ServerActions.ITEM_EDIT, ServerActions.ITEM_INBOX, ServerActions.ITEM_BINDINGS, ServerActions.ITEM_SITEMAP_FILTER }) public @interface ServerActions { int ITEM_EDIT = 1; int ITEM_INBOX = 2; int ITEM_BINDINGS = 3; int ITEM_SITEMAP_FILTER = 4; } /** * The fragment's ListView/GridView. */ @BindView(R.id.list) RecyclerView listView; /** * The Adapter which will be used to populate the ListView/GridView with * Views. */ private ImageItemAdapter adapter; public static ServerMenuFragment newInstance(long serverId) { ServerMenuFragment fragment = new ServerMenuFragment(); Bundle args = new Bundle(); args.putLong(ARG_SERVER, serverId); fragment.setArguments(args); return fragment; } /** * Mandatory empty constructor for the fragment manager to instantiate the * fragment (e.g. upon screen orientation changes). */ public ServerMenuFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); serverId = getArguments().getLong(ARG_SERVER); getApplicationComponent().inject(this); } protected HabitApplication.ApplicationComponent getApplicationComponent() { return ((HabitApplication) getContext().getApplicationContext()).component(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.container = container; View view = inflater.inflate(R.layout.fragment_servers_settings, container, false); unbinder = ButterKnife.bind(this, view); ArrayList<ImageItem> items = new ArrayList<>(); items.add(new ImageItem(ServerActions.ITEM_EDIT, getString(R.string.edit), R.drawable.ic_edit)); items.add(new ImageItem(ServerActions.ITEM_INBOX, getString(R.string.inbox), R.drawable.ic_inbox)); items.add(new ImageItem(ServerActions.ITEM_BINDINGS, getString(R.string.bindings), R.drawable.ic_binding)); items.add(new ImageItem(ServerActions.ITEM_SITEMAP_FILTER, getString(R.string.sitemaps), R.drawable.ic_sitemap)); adapter = new ImageItemAdapter(getActivity(), R.layout.item_menu_image_box); // Set the adapter listView.setAdapter(adapter); RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 2); listView.setLayoutManager(layoutManager); listView.setItemAnimator(new DefaultItemAnimator()); adapter.setItemClickListener(optionsSelectListener); adapter.addAll(items); listView.setAdapter(adapter); ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if(actionBar != null) actionBar.setTitle(R.string.settings); return view; } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } /** * Open inbox page * @param serverId the server to open page for. */ private void openInboxPage(long serverId){ getActivity().getSupportFragmentManager().beginTransaction() .replace(container.getId(), InboxListFragment.newInstance(serverId)) .addToBackStack(null) .commit(); } /** * Open bindings page for server. * @param serverId the server to open page for. */ private void openBindingsPage(long serverId){ getActivity().getSupportFragmentManager().beginTransaction() .replace(container.getId(), BindingsFragment.newInstance(serverId)) .addToBackStack(null) .commit(); } /** * Open sitemap page for server. * @param serverId the server to open page for. */ private void openSitemapSettingsPage(long serverId){ getActivity().getSupportFragmentManager().beginTransaction() .replace(container.getId(), SitemapSelectFragment.newInstance(serverId)) .addToBackStack(null) .commit(); } private ImageItemAdapter.OnItemClickListener optionsSelectListener = id -> { Fragment fragment = null; switch (id) { case ServerActions.ITEM_EDIT: fragment = SetupServerFragment.newInstance(serverId); break; case ServerActions.ITEM_INBOX: openInboxPage(serverId); break; case ServerActions.ITEM_BINDINGS: openBindingsPage(serverId); break; case ServerActions.ITEM_SITEMAP_FILTER: openSitemapSettingsPage(serverId); break; } if(fragment != null){ getActivity().getSupportFragmentManager().beginTransaction() .replace(R.id.page_container, fragment) .addToBackStack(null) .commit(); } }; }