package org.softeg.slartus.forpdaplus.fragments;
import android.app.NotificationManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import org.softeg.slartus.forpdaplus.App;
import org.softeg.slartus.forpdaplus.MainActivity;
import org.softeg.slartus.forpdaplus.listfragments.IBrickFragment;
import org.softeg.slartus.forpdaplus.tabs.TabItem;
/**
* Created by radiationx on 12.11.15.
*/
public abstract class GeneralFragment extends Fragment implements IBrickFragment{
public abstract boolean closeTab();
private ActionBar actionBar;
private MainActivity mainActivity;
protected View view;
private boolean fragmentPaused = true;
protected boolean activityCreated = false;
private String generalTitle = "ForPda";
private String generalSubtitle = null;
private String generalUrl = "DefaultURL";
private String generalParentTag = "DefaultParentTag";
private Menu menu;
public Menu getMenu() {
return menu;
}
public boolean isFragmentPaused() {
return fragmentPaused;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
this.menu = menu;
}
@Nullable
@Override
public View getView() {
return view;
}
public View findViewById(int id){
return view.findViewById(id);
}
public String getGeneralTitle() {
return generalTitle;
}
public String getGeneralUrl() {
return generalUrl;
}
public String getGeneralParentTag() {
return generalParentTag;
}
public void setTitle(CharSequence title){
setTitle(title.toString());
}
public void setTitle(String title){
generalTitle = title;
if(generalTitle!=null)
if(generalTitle.equals(getMainActivity().getTitle()))
return;
if(!fragmentPaused)
getMainActivity().setTitle(title);
}
public void setSubtitle(String subtitle){
generalSubtitle = subtitle;
/*Пусть нахрен заменяет! Ибо я хз что это паттерн такой, когда subTitle надо сохранять*/
// if(generalSubtitle!=null)
// if(generalSubtitle.equals(getSupportActionBar().getSubtitle()))
// return;
if(!fragmentPaused)
getSupportActionBar().setSubtitle(subtitle);
}
public MainActivity getMainActivity() {
if(mainActivity==null)
mainActivity = (MainActivity)getActivity();
return mainActivity;
}
private TabItem thisTab;
public void setThisTab(TabItem thisTab) {
this.thisTab = thisTab;
generalTitle = thisTab.getTitle();
generalSubtitle = thisTab.getSubTitle();
generalParentTag = thisTab.getParentTag();
}
public TabItem getThisTab() {
if(thisTab==null)
thisTab = App.getInstance().getTabByTag(getTag());
return thisTab;
}
public static SharedPreferences getPreferences() {
return App.getInstance().getPreferences();
}
private View.OnClickListener removeTabListener = v -> {
MainActivity.tabLog("Remove tab from fragment [ThisTag: "+getTag()+"]");
getMainActivity().tryRemoveTab(getTag(), true);
};
public void setArrow(){
getMainActivity().animateHamburger(false, removeTabListener);
}
public void removeArrow(){
getMainActivity().animateHamburger(true, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
if(savedInstanceState!=null){
generalTitle = savedInstanceState.getString("generalTitle");
generalUrl = savedInstanceState.getString("generalUrl");
generalParentTag = savedInstanceState.getString("generalParentTag");
Log.d("kek", getGeneralTitle()+" : "+getGeneralUrl()+" : "+getGeneralParentTag());
getThisTab().setTitle(generalTitle).setUrl(getGeneralUrl()).setParentTag(generalParentTag);
getMainActivity().notifyTabAdapter();
activityCreated = true;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("generalTitle", getThisTab().getTitle());
outState.putString("generalUrl", getThisTab().getUrl());
outState.putString("generalParentTag", getThisTab().getParentTag());
Log.d("kek", getThisTab().getTitle()+" : "+getThisTab().getUrl()+" : "+getThisTab().getParentTag());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivity = (MainActivity)getActivity();
actionBar = getMainActivity().getSupportActionBar();
fragmentPaused = false;
Log.e("kek", getTag() + " FRAGMENT " + thisTab);
}
public ActionBar getSupportActionBar() {
if(actionBar==null)
actionBar = getMainActivity().getSupportActionBar();
return actionBar;
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
fragmentPaused = false;
Log.e("kekos", "onresume "+getTag());
if(actionBar==null)
actionBar = getMainActivity().getSupportActionBar();
Log.d("kek", getMenu()+" : ");
if(getMenu()!=null)
onCreateOptionsMenu(getMenu(), null);
if(getMainActivity()!=null)
getMainActivity().setTitle(generalTitle);
if(getSupportActionBar()!=null)
getSupportActionBar().setSubtitle(generalSubtitle);
if(activityCreated){
getMainActivity().notifyTabAdapter();
}
}
@Override
public void onPause() {
super.onPause();
fragmentPaused = true;
Log.e("kekos", "onpause " + getTag());
if(getSupportActionBar()!=null)
getSupportActionBar().setSubtitle(null);
/*if(getMenu()!=null)
getMenu().clear();*/
getMainActivity().onCreateOptionsMenu(MainActivity.mainMenu);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDetach() {
super.onDetach();
System.gc();
Log.e("kek", "ondetach "+ getTag());
}
@Override
public String getListName() {
return null;
}
@Override
public String getListTitle() {
return null;
}
@Override
public void loadData(boolean isRefresh) {}
@Override
public void startLoad() {}
@Override
public boolean onBackPressed() {
return false;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return false;
}
public void hidePopupWindows(){}
public void clearNotification(int notifId) {
Log.i("Clear Notification", "Notification Id: " + notifId);
NotificationManager notificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(notifId);
}
}