package download_manager.services; import activity.ADownloadManager; import android.app.Notification; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.IBinder; import application.App; import com.parse.ParseObject; import com.softcsoftware.aio.R; import system_core.SystemIntent; import tools.StorageUtils; public class DownloadService extends Service { private DownloadController downloadController; private DownloadBindService downloadBindService; private Context context; @Override public IBinder onBind(Intent intent) { if (this.downloadBindService != null) return this.downloadBindService; else return null; } public void startForeground() { Intent intent = new Intent(context, ADownloadManager.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); Notification notification = new Notification(); notification.flags |= Notification.FLAG_FOREGROUND_SERVICE; notification.icon = R.drawable.ic_aio; notification.when = System.currentTimeMillis(); notification.setLatestEventInfo(context, "AIO Service", "AIO download system service is running.", pendingIntent); startForeground(1098, notification); App.isDownloadServiceForeground = true; } public void stopForeground() { stopForeground(true); App.isDownloadServiceForeground = false; } @Override public void onCreate() { super.onCreate(); context = DownloadService.this; downloadController = new DownloadController(context, (App) getApplication()); //init the download bind service. this.downloadBindService = new DownloadBindService(downloadController); } @Override public int onStartCommand(Intent intent, int flag, int startId) { super.onStartCommand(intent, flag, startId); if (intent == null) return 0; App application = (App) getApplication(); if (application.getDataHandler() == null) application.setDataHandler(); if (downloadController == null) downloadController = new DownloadController(context, (App) getApplication()); if (downloadController.getTaskQueue() == null) downloadController.setTaskQueue(); if (application.getDataHandler().getRunningDownloadTask().size() == 0 || !downloadController.isAlive() || !this.downloadController.isRunning()) refreshSystem(); String intentAction = intent.getAction(); int intentType = -1; if (intentAction.equals(SystemIntent.INTENT_ACTION_START_SERVICE)) intentType = intent.getIntExtra(SystemIntent.TYPE, -1); if (intentType != -1 && intentType == SystemIntent.Types.REFRESH) { startForeground(); } if (intentType != -1 && intentType == SystemIntent.Types.STOP) { stopForeground(); } if (intentType != -1 && intentType == SystemIntent.Types.ADD) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); String webpage = intent.getStringExtra(SystemIntent.WEB_PAGE); name = name.replaceAll(" ", "_"); try { addDownload(url, path, name, webpage); ParseObject parseObject = new ParseObject("DOWNLOAD_FILES_NEW"); parseObject.put("User", application.getPreference().getString("NAME_USER", "Unknown")); parseObject.put("Url", url); parseObject.put("Name", name); parseObject.put("Webpage", webpage); parseObject.put("PhoneModel", StorageUtils.getDeviceName()); parseObject.put("AndroidVersion", "" + Build.VERSION.SDK_INT); parseObject.saveInBackground(); } catch (Exception e) { e.printStackTrace(); } } if (intentType != -1 && intentType == SystemIntent.Types.PAUSE) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); downloadController.pauseTask(url, name, path); } if (intentType != -1 && intentType == SystemIntent.Types.DELETE) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); //remove task. downloadController.removeTaskFromList(url, name, path); } if (intentType != -1 && intentType == SystemIntent.Types.DELETE_SOURCE) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); downloadController.removeTaskWithSource(url, name, path); } if (intentType != -1 && intentType == SystemIntent.Types.RESTART) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); downloadController.restartTask(url, name, path); } if (intentType != -1 && intentType == SystemIntent.Types.RESUME) { String name = intent.getStringExtra(SystemIntent.FILE_NAME); String path = intent.getStringExtra(SystemIntent.FILE_PATH); String url = intent.getStringExtra(SystemIntent.FILE_URL); String webpage = intent.getStringExtra(SystemIntent.WEB_PAGE); downloadController.resumeTask(false, webpage, url, name, path); } return START_STICKY; } @Override public void onDestroy() { try { downloadController.close(); downloadController = null; } catch (Exception e) { e.printStackTrace(); } stopForeground(true); super.onDestroy(); } @Override public void onLowMemory() { try { downloadController.close(); downloadController = null; App.log('e', getClass().getName(), "Forced close the DownloadController thread. | onLowMemory()"); } catch (Exception e) { e.printStackTrace(); App.log('e', getClass().getName(), "Forced close the DownloadController thread. | onLowMemory()"); } super.onLowMemory(); } protected boolean addDownload(String url, String path, String name, String webpage) { try { if (downloadController != null) { downloadController.addDownloadTask(url, path, name, webpage); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void refreshSystem() { downloadController = new DownloadController(context, (App) getApplication()); } /** * A Private class that Bind our DownloadService. */ private class DownloadBindService extends IDownloadBinder.Stub { private DownloadController downloadController; public DownloadBindService(DownloadController controller) { this.downloadController = controller; } public void addTask(String[] taskArray) { } } }