package treehou.se.habit.ui.settings;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import com.mikepenz.aboutlibraries.LibsBuilder;
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.R;
import treehou.se.habit.ui.adapter.ImageAdapter;
import treehou.se.habit.ui.adapter.ImageItem;
import treehou.se.habit.ui.settings.subsettings.GeneralSettingsFragment;
import treehou.se.habit.ui.settings.subsettings.WidgetSettingsFragment;
import treehou.se.habit.util.IntentHelper;
public class SettingsFragment extends Fragment {
private Unbinder unbinder;
@Retention(RetentionPolicy.SOURCE)
@IntDef ({
SettingsItems.ITEM_WIDGETS,
SettingsItems.ITEM_GENERAL,
SettingsItems.ITEM_CUSTOM_WIDGETS,
SettingsItems.ITEM_LICENSES,
SettingsItems.ITEM_TRANSLATE})
public @interface SettingsItems {
int ITEM_WIDGETS = 1;
int ITEM_GENERAL = 2;
int ITEM_CUSTOM_WIDGETS = 3;
int ITEM_LICENSES = 4;
int ITEM_TRANSLATE = 5;
}
/**
* The fragment's ListView/GridView.
*/
@BindView(android.R.id.list) AbsListView mListView;
/**
* The Adapter which will be used to populate the ListView/GridView with
* Views.
*/
private ListAdapter mAdapter;
public static SettingsFragment newInstance() {
SettingsFragment fragment = new SettingsFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public SettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<ImageItem> items = new ArrayList<>();
items.add(new ImageItem(SettingsItems.ITEM_WIDGETS, getString(R.string.settings_widgets), R.drawable.ic_item_settings_widget));
items.add(new ImageItem(SettingsItems.ITEM_GENERAL, getString(R.string.settings_general), R.drawable.ic_item_notification));
items.add(new ImageItem(SettingsItems.ITEM_LICENSES, getString(R.string.open_source_libraries), R.drawable.ic_license));
items.add(new ImageItem(SettingsItems.ITEM_TRANSLATE, getString(R.string.help_translate), R.drawable.ic_language));
mAdapter = new ImageAdapter(getActivity(), items);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings, container, false);
unbinder = ButterKnife.bind(this, view);
// Set the adapter
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(optionsSelectListener);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if(actionBar != null) actionBar.setTitle(R.string.settings);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
AdapterView.OnItemClickListener optionsSelectListener = (parent, view, position, id) -> {
ImageItem item = (ImageItem) parent.getItemAtPosition(position);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
Fragment fragment = null;
switch (item.getId()) {
case SettingsItems.ITEM_WIDGETS:
fragment = WidgetSettingsFragment.newInstance();
break;
case SettingsItems.ITEM_GENERAL:
fragment = GeneralSettingsFragment.newInstance();
break;
case SettingsItems.ITEM_LICENSES :
fragment = new LibsBuilder().supportFragment();
if(actionBar != null) actionBar.setTitle(R.string.open_source_libraries);
break;
case SettingsItems.ITEM_TRANSLATE :
openTranslationSite();
return;
}
if(fragment != null){
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.page_container, fragment)
.addToBackStack(null)
.commit();
}
};
/**
* Opens translation site for project.
*/
private void openTranslationSite(){
startActivity(IntentHelper.helpTranslateIntent());
}
}