gt:         if (mediaManager != null) {
context: package com.reallynourl.nourl.fmpfoldermusicplayer.ui.activity;
  
  import android.app.FragmentManager;
  import android.app.FragmentTransaction;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.SharedPreferences;
  import android.content.pm.PackageManager;
  import android.os.Bundle;
  import android.preference.PreferenceManager;
  import android.support.annotation.IdRes;
  import android.support.annotation.NonNull;
  import android.support.design.widget.NavigationView;
  import android.support.design.widget.Snackbar;
  import android.support.v4.view.GravityCompat;
  import android.support.v4.widget.DrawerLayout;
  import android.support.v7.app.ActionBarDrawerToggle;
  import android.support.v7.app.AlertDialog;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.Toolbar;
  import android.util.Log;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.widget.Toast;
  
  import com.reallynourl.nourl.fmpfoldermusicplayer.R;
  import com.reallynourl.nourl.fmpfoldermusicplayer.backend.MediaManager;
  import com.reallynourl.nourl.fmpfoldermusicplayer.backend.MediaService;
  import com.reallynourl.nourl.fmpfoldermusicplayer.ui.fragment.FileBrowserFragment;
  import com.reallynourl.nourl.fmpfoldermusicplayer.ui.fragment.IMainContent;
  import com.reallynourl.nourl.fmpfoldermusicplayer.ui.fragment.MusicPlayingFragment;
  import com.reallynourl.nourl.fmpfoldermusicplayer.ui.fragment.SettingsFragment;
  import com.reallynourl.nourl.fmpfoldermusicplayer.ui.notifications.MediaNotification;
  import com.reallynourl.nourl.fmpfoldermusicplayer.utility.MyUncaughtExceptionHandler;
  import com.reallynourl.nourl.fmpfoldermusicplayer.utility.Util;
  
  /**
   * Copyright (C) 2015  Jannes Peters
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
  
  public class MainActivity extends AppCompatActivity
          implements NavigationView.OnNavigationItemSelectedListener {
      private static final int REQUEST_PERMISSION_STORAGE = 123;
      private static final String SAVED_INSTANCE_FRAGMENT = "last_loaded_fragment";
      private static final String CONTENT_FRAGMENT_TAG = "content_fragment";
  
      public static final String FRAGMENT_EXTRA = "fragment";
      private static MainActivity sInstance;
      private Snackbar mCloseSnackBar = null;
      private IMainContent mActiveContent;
      private String mActiveContentSavedName = null;
      private static boolean sIsStarted = false;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          Thread.currentThread().setName("main");
          Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler(Thread.getDefaultUncaughtExceptionHandler()));
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
  
          DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
          ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                  this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
          drawer.setDrawerListener(toggle);
          toggle.syncState();
  
          NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
          navigationView.setNavigationItemSelectedListener(this);
  
          mCloseSnackBar = Snackbar.make(findViewById(android.R.id.content), "Press again to exit ...", Snackbar.LENGTH_SHORT);
  
          if (MediaManager.getInstance() == null) {
              MediaManager.create(getApplicationContext());
          }
  
          if (savedInstanceState != null) {
              mActiveContentSavedName = savedInstanceState.getString(SAVED_INSTANCE_FRAGMENT, null);
          }
      }
  
      @Override
      protected void onNewIntent(Intent intent) {
          super.onNewIntent(intent);
          setIntent(intent);
          Log.d("MainActivity", "onNewIntent called!");
      }
  
      private boolean loadFragmentFromBundle(Bundle bundle) {
          boolean loaded = true;
          String res = "";
          if (bundle != null) {
              res = bundle.getString(FRAGMENT_EXTRA, "none");
          }
          switch (res) {
              case MusicPlayingFragment.NAME:
                  setNavigationItem(R.id.nav_currently_playing);
                  break;
              default:
                  loaded = false;
          }
          return loaded;
      }
  
      public static void selectFragment(Context context, @NonNull String fragment) {
          if (sInstance == null) {
              Bundle b = new Bundle(1);
              b.putString(MainActivity.FRAGMENT_EXTRA, fragment);
              Intent intent = new Intent(context, MainActivity.class);
              intent.putExtras(b);
              context.startActivity(intent);
          } else {
              if (fragment.equals(MusicPlayingFragment.NAME)) {
                  sInstance.setNavigationItem(R.id.nav_currently_playing);
              } else {
                  Log.i("MainActivity", "Something tried to load the unknown fragment: " + fragment);
              }
          }
      }
  
      @Override
      public void onBackPressed() {
          DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
          if (drawer.isDrawerOpen(GravityCompat.START)) {
              drawer.closeDrawer(GravityCompat.START);
          } else {
              if (mCloseSnackBar.isShown()) {
                  finish();
                  return;
              } else {
                  mCloseSnackBar = Snackbar.make(findViewById(android.R.id.content), "Press again to exit ...", Snackbar.LENGTH_SHORT);
              }
              if (mActiveContent != null) {
                  if (!mActiveContent.onBackPressed()) {
                      switch (mActiveContent.getName()) {
                          case MusicPlayingFragment.NAME:
                              setNavigationItem(R.id.nav_file_browser);
                              break;
                          default:
                              mCloseSnackBar.show();
                              break;
                      }
                  }
              }
          }
      }
  
      @Override
      public boolean onNavigationItemSelected(MenuItem item) {
          // Handle navigation view item clicks here.
          int id = item.getItemId();
  
          FragmentManager fm = getFragmentManager();
          IMainContent fragment = (IMainContent) fm.findFragmentByTag(CONTENT_FRAGMENT_TAG);
          if (fragment != null) mActiveContent = fragment;
          switch (id) {
              case R.id.nav_file_browser:
                  if (mActiveContent == null || !mActiveContent.getName().equals(FileBrowserFragment.NAME) || !mActiveContent.isCreated()) {
                      if (mActiveContentSavedName == null || !mActiveContentSavedName.equals(FileBrowserFragment.NAME)) {
                          loadFragmentToContent(new FileBrowserFragment());
                          Log.d("Navigation", "Loading file browser fragment!");
                      }
                  }
                  break;
              case R.id.nav_settings:
                  if (mActiveContent == null || !mActiveContent.getName().equals(SettingsFragment.NAME)) {
                      if (mActiveContentSavedName == null || !mActiveContentSavedName.equals(SettingsFragment.NAME)) {
                          loadFragmentToContent(new SettingsFragment());
                          Log.d("Navigation", "Loading Settings fragment");
                      }
                  }
                  break;
              case R.id.nav_currently_playing:
                  if (mActiveContent == null || !mActiveContent.getName().equals(MusicPlayingFragment.NAME)) {
                      if (mActiveContentSavedName == null || !mActiveContentSavedName.equals(MusicPlayingFragment.NAME)) {
                          loadFragmentToContent(new MusicPlayingFragment());
                          Log.d("Navigation", "Loading Player fragment");
                      }
                  }
                  break;
              default:
                  Log.e("Navigation", "Navigation button has no action, id: " + id + " text: " + item.getTitle());
          }
  
          mActiveContentSavedName = null;
          DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
          drawer.closeDrawer(GravityCompat.START);
          return true;
      }
  
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          if (mActiveContent != null) {
              outState.putString(SAVED_INSTANCE_FRAGMENT, mActiveContent.getName());
          }
          super.onSaveInstanceState(outState);
      }
  
      @Override
      protected void onStart() {
          if (MediaManager.getInstance() == null) {
              MediaManager.create(getApplicationContext());
          }
          sInstance = this;
          sIsStarted = true;
  
          if (Util.hasStoragePermission(this)) {
              loadUi();
          } else {
              Util.requestStoragePermission(this, REQUEST_PERMISSION_STORAGE);
          }
  
          super.onStart();
      }
  
      @Override
      protected void onResume() {
          super.onResume();
      }
  
      private void loadUi() {
          Bundle bundle = getIntent().getExtras();
  
          if (!loadFragmentFromBundle(bundle)) {
              String lastFragment = PreferenceManager.getDefaultSharedPreferences(this)
                      .getString(getString(R.string.pref_last_main_content_fragment), "");
              switch (lastFragment) {
                  case MusicPlayingFragment.NAME:
                      if (MediaManager.getInstance().getPlaylist().size() != 0) {
                          setNavigationItem(R.id.nav_currently_playing);
                          break;
                      }
                  case FileBrowserFragment.NAME:
                  default:
                      setNavigationItem(R.id.nav_file_browser);
              }
          }
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          menu.add("Clear Current List").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
              @Override
              public boolean onMenuItemClick(MenuItem item) {
                  DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          switch (which){
                              case DialogInterface.BUTTON_POSITIVE:
                                  MediaManager.getInstance().stop();
                                  MediaManager.getInstance().getPlaylist().clear();
                                  Snackbar.make(findViewById(R.id.content_panel), "Cleared the current list."
                                          , Snackbar.LENGTH_SHORT).show();
                                  break;
                              case DialogInterface.BUTTON_NEGATIVE:
                                  //ignore since nothing should be done
                                  break;
                          }
                      }
                  };
                  AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                  builder.setMessage("Are you sure you want to clear the list?\nThis will stop playback!")
                          .setPositiveButton("Yes", dialogClickListener)
                          .setNegativeButton("No", dialogClickListener)
                          .show();
                  return true;
              }
          });
          return true;
      }
  
      @Override
      protected void onStop() {
          sIsStarted = false;
          MediaService mediaService = MediaService.getInstance();
          if (mediaService != null && mediaService.getCurrentFile() != null) {
              MediaNotification.showUpdate(mediaService);
          }
          super.onStop();
      }
  
      @Override
      protected void onDestroy() {
          MediaManager mediaManager = MediaManager.getInstance();
  