package org.primftpd.services; import android.annotation.TargetApi; import android.content.SharedPreferences; import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import org.primftpd.PrefsBean; import org.primftpd.R; import org.primftpd.prefs.LoadPrefsUtil; import org.primftpd.util.ServersRunningBean; import org.primftpd.util.ServicesStartStopUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * QuickSettings tile support for Android N. */ @TargetApi(Build.VERSION_CODES.N) public class QuickSettingsService extends TileService { protected Logger logger = LoggerFactory.getLogger(getClass()); private PrefsBean prefsBean; @Override public void onCreate() { logger.debug("onCreate"); super.onCreate(); // move prefs loading to onStartListening() ? SharedPreferences prefs = LoadPrefsUtil.getPrefs(getBaseContext()); prefsBean = LoadPrefsUtil.loadPrefs(logger, prefs); } @Override public void onClick() { logger.debug("onClick"); super.onClick(); boolean isActive = isActive(); if(isActive) { // Stop service if it is already running. ServicesStartStopUtil.stopServers(this); } else { // Start FTP service. ServicesStartStopUtil.startServers(this, prefsBean, null); } updateTile(); } /** * Update the appearance of the tile. */ protected void updateTile() { logger.debug("updateTile"); Tile tile = this.getQsTile(); boolean isActive = isActive(); String newLabel; int newState; // Change the tile to match the service status. if (isActive) { newLabel = getString(R.string.quickSettingsServerStarted); newState = Tile.STATE_ACTIVE; } else { newLabel = getString(R.string.quickSettingsServerStopped); newState = Tile.STATE_INACTIVE; } // Change the UI of the tile. tile.setLabel(newLabel); tile.setState(newState); tile.updateTile(); } @Override public void onStartListening() { logger.debug("onStartListening"); super.onStartListening(); updateTile(); } @Override public void onStopListening() { logger.debug("onStopListening"); super.onStopListening(); updateTile(); } /** * * @return Whether we have an FTP service running. */ private boolean isActive() { ServersRunningBean serversRunningBean = ServicesStartStopUtil.checkServicesRunning(this); return serversRunningBean != null && serversRunningBean.atLeastOneRunning(); } }