/*
* Copyright (c) 2015 Jarrad Hope
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package io.syng.fragment.profile;
import android.app.Dialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.DialogFragment;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Toast;
import io.syng.R;
import io.syng.adapter.ProfileViewPagerAdapter;
import io.syng.entity.Profile;
import io.syng.util.GeneralUtil;
import io.syng.util.ProfileManager;
public class ProfileDialogFragment extends DialogFragment implements OnPageChangeListener,
OnClickListener, OnMenuItemClickListener {
private static final String ARG_PROFILE_ID = "profile";
private ViewPager mViewPager;
private Toolbar mToolbar;
private String mProfileId;
public static ProfileDialogFragment newInstance(final Profile profile) {
Bundle bundle = new Bundle();
bundle.putString(ARG_PROFILE_ID, profile.getId());
ProfileDialogFragment dialogFragment = new ProfileDialogFragment();
dialogFragment.setArguments(bundle);
return dialogFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mProfileId = getArguments().getString(ARG_PROFILE_ID);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.profile_edit_dialog, container);
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.profile_tabs);
mViewPager = (ViewPager) view.findViewById(R.id.profile_view_pager);
mViewPager.addOnPageChangeListener(this);
mToolbar = (Toolbar) view.findViewById(R.id.profile_toolbar);
mToolbar.setTitle("Edit Profile");
mToolbar.inflateMenu(R.menu.profile_menu);
MenuItem exportProfile = mToolbar.getMenu().findItem(R.id.action_key_export);
exportProfile.setVisible(false);
exportProfile.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
MenuItem importProfile = mToolbar.getMenu().findItem(R.id.action_key_import);
importProfile.setVisible(false);
importProfile.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
GeneralUtil.showProfileImportDialog(getActivity());
return false;
}
});
mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
mToolbar.setNavigationOnClickListener(this);
mToolbar.setOnMenuItemClickListener(this);
tintMenuItem();
mViewPager.setAdapter(new ProfileViewPagerAdapter(getChildFragmentManager(), getActivity(), mProfileId));
tabLayout.setupWithViewPager(mViewPager);
return view;
}
private void tintMenuItem() {
Drawable drawable1 = mToolbar.getMenu().findItem(R.id.action_key_export).getIcon();
drawable1 = DrawableCompat.wrap(drawable1);
DrawableCompat.setTint(drawable1, getResources().getColor(R.color.drawer_icon_color));
mToolbar.getMenu().findItem(R.id.action_key_export).setIcon(drawable1);
Drawable drawable2 = mToolbar.getMenu().findItem(R.id.action_key_import).getIcon();
drawable2 = DrawableCompat.wrap(drawable2);
DrawableCompat.setTint(drawable2, getResources().getColor(R.color.drawer_icon_color));
mToolbar.getMenu().findItem(R.id.action_key_import).setIcon(drawable2);
Drawable drawable3 = mToolbar.getMenu().findItem(R.id.action_remove).getIcon();
drawable3 = DrawableCompat.wrap(drawable3);
DrawableCompat.setTint(drawable3, getResources().getColor(R.color.drawer_icon_color));
mToolbar.getMenu().findItem(R.id.action_remove).setIcon(drawable3);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
invalidateToolbarMenu();
}
@Override
public void onPageScrollStateChanged(int state) {
}
private void invalidateToolbarMenu() {
MenuItem exp = mToolbar.getMenu().findItem(R.id.action_key_export);
MenuItem imp = mToolbar.getMenu().findItem(R.id.action_key_import);
boolean showExport = mViewPager.getCurrentItem() == ProfileViewPagerAdapter.KEYS_POSITION;
exp.setVisible(showExport);
imp.setVisible(showExport);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_remove:
Profile profile = ProfileManager.getProfileById(mProfileId);
if (ProfileManager.removeProfile(profile)) {
ProfileDialogFragment.this.dismiss();
} else {
Toast.makeText(getActivity(), "Can't remove current account", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
@Override
public void onClick(View v) {
dismiss();
}
}