diff --git a/app/src/main/java/foundation/e/drive/services/OperationManagerService.java b/app/src/main/java/foundation/e/drive/services/OperationManagerService.java index eb0999c2ed6d7d04550539c8787f3bb02f4d3b1d..7054df66db0bd165d717dd49c69309ba94625c32 100644 --- a/app/src/main/java/foundation/e/drive/services/OperationManagerService.java +++ b/app/src/main/java/foundation/e/drive/services/OperationManagerService.java @@ -239,59 +239,70 @@ public class OperationManagerService extends Service implements OnRemoteOperatio public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand()"); - CommonUtils.setServiceUnCaughtExceptionHandler(this); - - Bundle extras = intent.getExtras(); - Log.d(TAG, "OperationManagerService recieved "+(extras == null ? "null extras": extras.size()+" operations to perform") ); - - if(extras != null) { - //Load operation from intent - this.mOperationsQueue = new ConcurrentLinkedDeque<>(); - for (String key : extras.keySet()) { - - Parcelable parcelableObject = extras.getParcelable(key); - if (key.equals("account")) { - this.mAccount = (Account) parcelableObject; - } else if (parcelableObject.getClass().getName().equals(DownloadFileOperation.class.getName())) { - DownloadFileOperation download = (DownloadFileOperation) parcelableObject; - download.setContext(getApplicationContext()); - mOperationsQueue.add(download); - } else if (parcelableObject.getClass().getName().equals(UploadFileOperation.class.getName())) { - UploadFileOperation upload = (UploadFileOperation) parcelableObject; - upload.setContext(getApplicationContext()); - mOperationsQueue.add(upload); - } else if (parcelableObject.getClass().getName().equals(RemoveFileOperation.class.getName())) { - mOperationsQueue.add((RemoveFileOperation) parcelableObject); - } - } + try{ + CommonUtils.setServiceUnCaughtExceptionHandler(this); - if(mAccount == null || mOperationsQueue.isEmpty()){ - Log.w(TAG, "No account or Operation queue is empty"); - return super.onStartCommand(intent, flags, startId); + if (null == intent || null == intent.getAction ()) { + String source = null == intent ? "intent" : "action"; + Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags)); + //return START_STICKY; } - //Initialize class's field - this.workerAmount = 4; //This variable could be replace later by an option in settings - - this.mThreadPool = new Thread[workerAmount]; - this.mThreadWorkingState = new boolean[workerAmount]; - this.mHandler = new OperationManagerHandler(this); - this.mStartedOperations = new Hashtable(); + Bundle extras = intent.getExtras(); + Log.d(TAG, "OperationManagerService recieved "+(extras == null ? "null extras": extras.size()+" operations to perform") ); + + if(extras != null) { + //Load operation from intent + this.mOperationsQueue = new ConcurrentLinkedDeque<>(); + for (String key : extras.keySet()) { + + Parcelable parcelableObject = extras.getParcelable(key); + if (key.equals("account")) { + this.mAccount = (Account) parcelableObject; + } else if (parcelableObject.getClass().getName().equals(DownloadFileOperation.class.getName())) { + DownloadFileOperation download = (DownloadFileOperation) parcelableObject; + download.setContext(getApplicationContext()); + mOperationsQueue.add(download); + } else if (parcelableObject.getClass().getName().equals(UploadFileOperation.class.getName())) { + UploadFileOperation upload = (UploadFileOperation) parcelableObject; + upload.setContext(getApplicationContext()); + mOperationsQueue.add(upload); + } else if (parcelableObject.getClass().getName().equals(RemoveFileOperation.class.getName())) { + mOperationsQueue.add((RemoveFileOperation) parcelableObject); + } + } - mClient = DavClientProvider.getInstance().getClientInstance(mAccount, getApplicationContext()); - if (mClient != null) { - getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE) - .edit() - .putBoolean(AppConstants.KEY_OMS_IS_WORKING, true) - .apply(); + if(mAccount == null || mOperationsQueue.isEmpty()){ + Log.w(TAG, "No account or Operation queue is empty"); + return super.onStartCommand(intent, flags, startId); + } - startAllThreads(); - } else { - Log.w(TAG, "No Client, Can't Work!"); - stopSelf(); + //Initialize class's field + this.workerAmount = 4; //This variable could be replace later by an option in settings + + this.mThreadPool = new Thread[workerAmount]; + this.mThreadWorkingState = new boolean[workerAmount]; + this.mHandler = new OperationManagerHandler(this); + this.mStartedOperations = new Hashtable(); + + mClient = DavClientProvider.getInstance().getClientInstance(mAccount, getApplicationContext()); + if (mClient != null) { + getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE) + .edit() + .putBoolean(AppConstants.KEY_OMS_IS_WORKING, true) + .apply(); + + startAllThreads(); + } else { + Log.w(TAG, "No Client, Can't Work!"); + stopSelf(); + } + }else{ + Log.w(TAG, "Intent's extras is null."); } - }else{ - Log.w(TAG, "Intent's extras is null."); + }catch (Exception ex){ + Log.e("Exception", ex.getMessage()); + ex.printStackTrace(); } return super.onStartCommand(intent, flags, startId);