package i2p.bote.android.util;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import i2p.bote.I2PBote;
import i2p.bote.android.R;
public abstract class AuthenticatedFragment extends Fragment {
private FrameLayout mAuthenticatedView;
private MenuItem mLogIn;
private MenuItem mClearPassword;
private boolean mFragmentInitialized;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_authenticated, container, false);
mAuthenticatedView = (FrameLayout) view.findViewById(R.id.authenticated_view);
mAuthenticatedView.addView(onCreateAuthenticatedView(inflater, container, savedInstanceState));
return view;
}
protected abstract View onCreateAuthenticatedView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
@Override
public void onResume() {
super.onResume();
if (I2PBote.getInstance().isPasswordRequired()) {
// Ensure any existing data is destroyed.
destroyFragment();
} else {
// Password is cached, or not set.
initializeFragment();
}
getActivity().supportInvalidateOptionsMenu();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.authenticated_fragment, menu);
mLogIn = menu.findItem(R.id.action_log_in);
mClearPassword = menu.findItem(R.id.action_log_out);
mLogIn.setIcon(BoteHelper.getMenuIcon(getActivity(), GoogleMaterial.Icon.gmd_lock));
mClearPassword.setIcon(BoteHelper.getMenuIcon(getActivity(), GoogleMaterial.Icon.gmd_lock_open));
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
mLogIn.setVisible(I2PBote.getInstance().isPasswordRequired());
mClearPassword.setVisible(I2PBote.getInstance().isPasswordInCache());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_log_in:
// Request a password from the user.
BoteHelper.requestPassword(getActivity(), new BoteHelper.RequestPasswordListener() {
@Override
public void onPasswordVerified() {
initializeFragment();
getActivity().supportInvalidateOptionsMenu();
}
@Override
public void onPasswordCanceled() {
}
});
return true;
case R.id.action_log_out:
BoteHelper.clearPassword();
destroyFragment();
getActivity().supportInvalidateOptionsMenu();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void initializeFragment() {
if (mFragmentInitialized)
return;
onInitializeFragment();
mAuthenticatedView.setVisibility(View.VISIBLE);
mFragmentInitialized = true;
}
private void destroyFragment() {
onDestroyFragment();
mAuthenticatedView.setVisibility(View.GONE);
mFragmentInitialized = false;
}
protected abstract void onInitializeFragment();
protected abstract void onDestroyFragment();
}