diff options
author | David-Development <david-dev@live.de> | 2014-01-24 12:45:36 +0400 |
---|---|---|
committer | David-Development <david-dev@live.de> | 2014-01-24 12:45:36 +0400 |
commit | f61a3827ee7340789e88d0131ddb0d1cd869c139 (patch) | |
tree | caac623e7775f6472c3824d37ad4894a4a9226c3 /News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services | |
parent | 6d17fdc09753954b8c2c4dab739aa53d42bbc3b7 (diff) |
Update project structure for gradle build system
Diffstat (limited to 'News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services')
7 files changed, 720 insertions, 0 deletions
diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java new file mode 100644 index 00000000..1d5590cc --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java @@ -0,0 +1,233 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +package de.luhmer.owncloudnewsreader.services; + +import android.app.IntentService; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.preference.PreferenceManager; +import android.support.v4.app.NotificationCompat; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Random; + +import de.luhmer.owncloudnewsreader.NewsReaderListActivity; +import de.luhmer.owncloudnewsreader.R; +import de.luhmer.owncloudnewsreader.SettingsActivity; +import de.luhmer.owncloudnewsreader.async_tasks.GetImageAsyncTask; +import de.luhmer.owncloudnewsreader.database.DatabaseConnection; +import de.luhmer.owncloudnewsreader.helper.BitmapDrawableLruCache; +import de.luhmer.owncloudnewsreader.helper.ImageDownloadFinished; +import de.luhmer.owncloudnewsreader.helper.ImageHandler; + +public class DownloadImagesService extends IntentService { + + public static final String LAST_ITEM_ID = "LAST_ITEM_ID"; + private static Random random; + + private int NOTIFICATION_ID = 1; + private NotificationManager notificationManager; + private NotificationCompat.Builder NotificationDownloadImages; + private int count; + private int maxCount; + //private int total_size = 0; + + public DownloadImagesService() { + super(null); + initService(); + } + + public DownloadImagesService(String name) { + super(name); + initService(); + } + + private void initService() + { + count = 0; + maxCount = 0; + if(random == null) + random = new Random(); + NOTIFICATION_ID = random.nextInt(); + } + + @Override + public void onDestroy() { + if(NotificationDownloadImages != null) + { + if(maxCount == 0) + notificationManager.cancel(NOTIFICATION_ID); + /* + else if(maxCount != count) + { + NotificationDownloadImages.setProgress(maxCount, count, false); + NotificationDownloadImages.setContentText("Stopped downloading images. Application was closed."); + notificationManager.notify(NOTIFICATION_ID, NotificationDownloadImages.build()); + }*/ + } + super.onDestroy(); + } + + @Override + protected void onHandleIntent(Intent intent) { + String lastId = String.valueOf(intent.getLongExtra(LAST_ITEM_ID, 0)); + DatabaseConnection dbConn = new DatabaseConnection(this); + Cursor cursor = dbConn.getAllItemsWithIdHigher(lastId); + List<String> links = new ArrayList<String>(); + try + { + if(cursor != null) + { + while(cursor.moveToNext()) + { + String body = cursor.getString(cursor.getColumnIndex(DatabaseConnection.RSS_ITEM_BODY)); + links.addAll(ImageHandler.getImageLinksFromText(body)); + } + } + } catch(Exception ex) { + ex.printStackTrace(); + } finally { + cursor.close(); + dbConn.closeDatabase(); + } + maxCount = links.size(); + + Intent intentNewsReader = new Intent(this, NewsReaderListActivity.class); + PendingIntent pIntent = PendingIntent.getActivity(this, 0, intentNewsReader, 0); + notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); + NotificationDownloadImages = new NotificationCompat.Builder(this) + .setContentTitle("ownCloud News Reader") + .setContentText("Downloading Images for offline usage") + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pIntent); + + Notification notify = NotificationDownloadImages.build(); + + //Hide the notification after its selected + notify.flags |= Notification.FLAG_AUTO_CANCEL; + //notify.flags |= Notification.FLAG_NO_CLEAR; + + if(maxCount > 0) + notificationManager.notify(NOTIFICATION_ID, notify); + + for(String link : links) + new GetImageAsyncTask(link, imgDownloadFinished, 999, ImageHandler.getPathImageCache(this), this, null).execute(); + } + + private void RemoveOldImages(Context context) { + HashMap<File, Long> files; + long size = ImageHandler.getFolderSize(new File(ImageHandler.getPath(context))); + size = (long) (size / 1024d / 1024d); + + SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context); + int max_allowed_size = Integer.parseInt(mPrefs.getString(SettingsActivity.SP_MAX_CACHE_SIZE, "1000"));//Default is 1Gb --> 1000mb + if(size > max_allowed_size) + { + files = new HashMap<File, Long>(); + for(File file : ImageHandler.getFilesFromDir(new File(ImageHandler.getPathImageCache(context)))) + { + files.put(file, file.lastModified()); + } + + for(Object itemObj : sortHashMapByValuesD(files).entrySet()) + { + File file = (File) itemObj; + file.delete(); + size -= file.length(); + if(size < max_allowed_size) + break; + } + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public static LinkedHashMap sortHashMapByValuesD(HashMap passedMap) { + List mapKeys = new ArrayList(passedMap.keySet()); + List mapValues = new ArrayList(passedMap.values()); + Collections.sort(mapValues); + Collections.sort(mapKeys); + + LinkedHashMap sortedMap = new LinkedHashMap(); + + Iterator valueIt = mapValues.iterator(); + while (valueIt.hasNext()) { + Object val = valueIt.next(); + Iterator keyIt = mapKeys.iterator(); + + while (keyIt.hasNext()) { + Object key = keyIt.next(); + String comp1 = passedMap.get(key).toString(); + String comp2 = val.toString(); + + if (comp1.equals(comp2)){ + passedMap.remove(key); + mapKeys.remove(key); + sortedMap.put((String)key, (Double)val); + break; + } + } + } + return sortedMap; + } + + ImageDownloadFinished imgDownloadFinished = new ImageDownloadFinished() { + + @Override + public void DownloadFinished(int AsynkTaskId, String fileCachePath, BitmapDrawableLruCache lruCache) { + + if(fileCachePath != null) { + File file = new File(fileCachePath); + long size = file.length(); + //total_size += size; + if(size == 0) + file.delete(); + } + + + count++; + // Sets the progress indicator to a max value, the + // current completion percentage, and "determinate" + // state + NotificationDownloadImages.setProgress(maxCount, count, false); + NotificationDownloadImages.setContentText("Downloading Images for offline usage - " + count + "/" + maxCount); + // Displays the progress bar for the first time. + notificationManager.notify(NOTIFICATION_ID, NotificationDownloadImages.build()); + + if(maxCount == count) { + notificationManager.cancel(NOTIFICATION_ID); + if(DownloadImagesService.this != null) + RemoveOldImages(DownloadImagesService.this); + } + } + }; +} diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncService.aidl b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncService.aidl new file mode 100644 index 00000000..e1851bac --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncService.aidl @@ -0,0 +1,16 @@ +package de.luhmer.owncloudnewsreader.services; + +import de.luhmer.owncloudnewsreader.services.IOwnCloudSyncServiceCallback; + +// Declare any non-default types here with import statements + +/** Example service interface */ +interface IOwnCloudSyncService { + /** Request the process ID of this service, to do evil things with it. */ + + + void registerCallback(IOwnCloudSyncServiceCallback callback); + void unregisterCallback(IOwnCloudSyncServiceCallback callback); + void startSync(); + boolean isSyncRunning(); +}
\ No newline at end of file diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncServiceCallback.aidl b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncServiceCallback.aidl new file mode 100644 index 00000000..8a29274d --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncServiceCallback.aidl @@ -0,0 +1,12 @@ +package de.luhmer.owncloudnewsreader.services; + +import de.luhmer.owncloudnewsreader.helper.AidlException; + +oneway interface IOwnCloudSyncServiceCallback { + //void doCallback(in String value); + + void startedSync(String sync_type); + void finishedSync(String sync_type); + + void throwException(out AidlException ex); +}
\ No newline at end of file diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudAuthenticatorService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudAuthenticatorService.java new file mode 100644 index 00000000..219bed68 --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudAuthenticatorService.java @@ -0,0 +1,27 @@ +package de.luhmer.owncloudnewsreader.services; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; + +import de.luhmer.owncloudnewsreader.authentication.OwnCloudAccountAuthenticator; + +public class OwnCloudAuthenticatorService extends Service { + + // Instance field that stores the authenticator object + private OwnCloudAccountAuthenticator mAuthenticator; + + @Override + public void onCreate() { + // Create a new authenticator object + mAuthenticator = new OwnCloudAccountAuthenticator(this); + } + /* + * When the system binds to this Service to make the RPC call + * return the authenticator's IBinder. + */ + @Override + public IBinder onBind(Intent intent) { + return mAuthenticator.getIBinder(); + } +} diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSettingsSyncService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSettingsSyncService.java new file mode 100644 index 00000000..213e7bf1 --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSettingsSyncService.java @@ -0,0 +1,26 @@ +package de.luhmer.owncloudnewsreader.services; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; + +import de.luhmer.owncloudnewsreader.authentication.OwnCloudSyncAdapter; + +public class OwnCloudSettingsSyncService extends Service { + private static final Object sSyncAdapterLock = new Object(); + private static OwnCloudSyncAdapter sSyncAdapter = null; + + @Override + public void onCreate() { + synchronized (sSyncAdapterLock) { + if (sSyncAdapter == null) { + sSyncAdapter = new OwnCloudSyncAdapter(this, true); + } + } + } + + @Override + public IBinder onBind(Intent intent) { + return sSyncAdapter.getSyncAdapterBinder(); + } +}
\ No newline at end of file diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSyncService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSyncService.java new file mode 100644 index 00000000..15d3c54e --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSyncService.java @@ -0,0 +1,306 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +package de.luhmer.owncloudnewsreader.services; + +import android.app.ActivityManager; +import android.app.Service; +import android.appwidget.AppWidgetManager; +import android.content.ComponentName; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.IBinder; +import android.os.RemoteCallbackList; +import android.os.RemoteException; +import android.preference.PreferenceManager; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +import de.luhmer.owncloudnewsreader.Constants; +import de.luhmer.owncloudnewsreader.Constants.SYNC_TYPES; +import de.luhmer.owncloudnewsreader.R; +import de.luhmer.owncloudnewsreader.SettingsActivity; +import de.luhmer.owncloudnewsreader.helper.AidlException; +import de.luhmer.owncloudnewsreader.helper.NotificationManagerNewsReader; +import de.luhmer.owncloudnewsreader.reader.FeedItemTags.TAGS; +import de.luhmer.owncloudnewsreader.reader.IReader; +import de.luhmer.owncloudnewsreader.reader.OnAsyncTaskCompletedListener; +import de.luhmer.owncloudnewsreader.reader.owncloud.API; +import de.luhmer.owncloudnewsreader.reader.owncloud.OwnCloud_Reader; +import de.luhmer.owncloudnewsreader.reader.owncloud.apiv2.APIv2; +import de.luhmer.owncloudnewsreader.reader.owncloud.apiv2.AsyncTask_TriggerOcUpdate; +import de.luhmer.owncloudnewsreader.services.IOwnCloudSyncService.Stub; +import de.luhmer.owncloudnewsreader.widget.WidgetProvider; + +public class OwnCloudSyncService extends Service { + + protected static final String TAG = "OwnCloudSyncService"; + + private RemoteCallbackList<IOwnCloudSyncServiceCallback> callbacks = new RemoteCallbackList<IOwnCloudSyncServiceCallback>(); + + private Stub mBinder = new IOwnCloudSyncService.Stub() { + + public void registerCallback(IOwnCloudSyncServiceCallback callback) { + callbacks.register(callback); + } + + public void unregisterCallback(IOwnCloudSyncServiceCallback callback) { + callbacks.unregister(callback); + } + + @Override + public void startSync() throws RemoteException { + if(!isSyncRunning()) { + startedSync(SYNC_TYPES.SYNC_TYPE__GET_API); + OwnCloud_Reader ocReader = (OwnCloud_Reader) _Reader; + SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(OwnCloudSyncService.this); + String username = mPrefs.getString(SettingsActivity.EDT_USERNAME_STRING, ""); + String password = mPrefs.getString(SettingsActivity.EDT_PASSWORD_STRING, ""); + ocReader.Start_AsyncTask_GetVersion(Constants.TaskID_GetVersion, OwnCloudSyncService.this, onAsyncTask_GetVersionFinished, username, password); + } + } + + @Override + public boolean isSyncRunning() throws RemoteException { + return _Reader.isSyncRunning(); + } + }; + + + static IReader _Reader; + + @Override + public void onCreate() { + super.onCreate(); + if(_Reader == null) + _Reader = new OwnCloud_Reader(); + Log.d(TAG, "onCreate() called"); + } + + + OnAsyncTaskCompletedListener onAsyncTask_GetVersionFinished = new OnAsyncTaskCompletedListener() { + + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + finishedSync(SYNC_TYPES.SYNC_TYPE__GET_API); + + if(!(task_result instanceof Exception)) + { + String appVersion = task_result.toString(); + API api = API.GetRightApiForVersion(appVersion, OwnCloudSyncService.this); + ((OwnCloud_Reader) _Reader).setApi(api); + + _Reader.Start_AsyncTask_PerformItemStateChange(Constants.TaskID_PerformStateChange, OwnCloudSyncService.this, onAsyncTask_PerformTagExecute); + + startedSync(SYNC_TYPES.SYNC_TYPE__ITEM_STATES); + } + else + ThrowException((Exception) task_result); + } + }; + + //Sync state of items e.g. read/unread/starred/unstarred + OnAsyncTaskCompletedListener onAsyncTask_PerformTagExecute = new OnAsyncTaskCompletedListener() { + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + finishedSync(SYNC_TYPES.SYNC_TYPE__ITEM_STATES); + + if(task_result != null)//task result is null if there was an error + { + if((Boolean) task_result) + { + if(task_id == Constants.TaskID_PerformStateChange) { + _Reader.Start_AsyncTask_GetFolder(Constants.TaskID_GetFolder, OwnCloudSyncService.this, onAsyncTask_GetFolder); + + + startedSync(SYNC_TYPES.SYNC_TYPE__FOLDER); + } + else + _Reader.setSyncRunning(true); + } + } + } + }; + + + OnAsyncTaskCompletedListener onAsyncTask_GetFolder = new OnAsyncTaskCompletedListener() { + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + finishedSync(SYNC_TYPES.SYNC_TYPE__FOLDER); + + if(task_result != null) + ThrowException((Exception) task_result); + else { + _Reader.Start_AsyncTask_GetFeeds(Constants.TaskID_GetFeeds, OwnCloudSyncService.this, onAsyncTask_GetFeed); + + startedSync(SYNC_TYPES.SYNC_TYPE__FEEDS); + } + + Log.d(TAG, "onAsyncTask_GetFolder Finished"); + + } + }; + + OnAsyncTaskCompletedListener onAsyncTask_GetFeed = new OnAsyncTaskCompletedListener() { + + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + finishedSync(SYNC_TYPES.SYNC_TYPE__FEEDS); + + if(task_result != null) + ThrowException((Exception) task_result); + else { + _Reader.Start_AsyncTask_GetItems(Constants.TaskID_GetItems, OwnCloudSyncService.this, onAsyncTask_GetItems, TAGS.ALL);//Recieve all unread Items + + startedSync(SYNC_TYPES.SYNC_TYPE__ITEMS); + } + + Log.d(TAG, "onAsyncTask_GetFeed Finished"); + } + }; + + OnAsyncTaskCompletedListener onAsyncTask_GetItems = new OnAsyncTaskCompletedListener() { + + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + finishedSync(SYNC_TYPES.SYNC_TYPE__ITEMS); + + if(task_result != null) + ThrowException((Exception) task_result); + else + { + SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(OwnCloudSyncService.this); + int newItemsCount = mPrefs.getInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, 0); + if(newItemsCount > 0) { + ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + List<ActivityManager.RunningTaskInfo> runningTaskInfo = am.getRunningTasks(1); + + ComponentName componentInfo = runningTaskInfo.get(0).topActivity; + if(!componentInfo.getPackageName().equals("de.luhmer.owncloudnewsreader")) { + String tickerText = getString(R.string.notification_new_items_ticker).replace("X", String.valueOf(newItemsCount)); + String contentText = getString(R.string.notification_new_items_text).replace("X", String.valueOf(newItemsCount)); + String title = getString(R.string.app_name); + + if(mPrefs.getBoolean(SettingsActivity.CB_SHOW_NOTIFICATION_NEW_ARTICLES_STRING, true))//Default is true + NotificationManagerNewsReader.getInstance(OwnCloudSyncService.this).ShowMessage(title, tickerText, contentText); + } + UpdateWidget(); + } + + if(_Reader instanceof OwnCloud_Reader) { + API api = ((OwnCloud_Reader)_Reader).getApi(); + if(api instanceof APIv2) { + new AsyncTask_TriggerOcUpdate(0, + OwnCloudSyncService.this, + api.getUsername(), + api.getPassword(), + new OnAsyncTaskCompletedListener[] { onAsyncTask_UpdateOcFeeds }) + .execute((Void) null); + } + } + } + + Log.d(TAG, "onAsyncTask_GetItems Finished"); + //fireUpdateFinishedClicked(); + + } + }; + + OnAsyncTaskCompletedListener onAsyncTask_UpdateOcFeeds = new OnAsyncTaskCompletedListener() { + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + } + }; + + private void UpdateWidget() + { + Intent intent = new Intent(this, WidgetProvider.class); + intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); + // Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID, + // since it seems the onUpdate() is only fired on that: + + int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetProvider.class)); + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids); + intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,ids); + sendBroadcast(intent); + } + + private void ThrowException(Exception ex) { + List<IOwnCloudSyncServiceCallback> callbackList = getCallBackItemsAndBeginBroadcast(); + for (IOwnCloudSyncServiceCallback icb : callbackList) { + try { + icb.throwException(new AidlException(ex)); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + callbacks.finishBroadcast(); + } + + private void startedSync(SYNC_TYPES sync_type) { + List<IOwnCloudSyncServiceCallback> callbackList = getCallBackItemsAndBeginBroadcast(); + for(IOwnCloudSyncServiceCallback icb : callbackList) { + try { + icb.startedSync(sync_type.toString()); + //icb.finishedSyncOfItems(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + callbacks.finishBroadcast(); + } + + private void finishedSync(SYNC_TYPES sync_type) { + List<IOwnCloudSyncServiceCallback> callbackList = getCallBackItemsAndBeginBroadcast(); + for(IOwnCloudSyncServiceCallback icb : callbackList) { + try { + icb.finishedSync(sync_type.toString()); + //icb.finishedSyncOfItems(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + callbacks.finishBroadcast(); + } + + private List<IOwnCloudSyncServiceCallback> getCallBackItemsAndBeginBroadcast() { + // Broadcast to all clients the new value. + List<IOwnCloudSyncServiceCallback> callbackList = new ArrayList<IOwnCloudSyncServiceCallback>(); + final int N = callbacks.beginBroadcast(); + for (int i=0; i < N; i++) { + callbackList.add((IOwnCloudSyncServiceCallback) callbacks.getBroadcastItem(i)); + } + return callbackList; + } + + + @Override + public IBinder onBind(Intent intent) { + return mBinder; + } +} diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java new file mode 100644 index 00000000..82a16cc4 --- /dev/null +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java @@ -0,0 +1,100 @@ +/** +* Android ownCloud News +* +* @author David Luhmer +* @copyright 2013 David Luhmer david-dev@live.de +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +package de.luhmer.owncloudnewsreader.services; + +import android.app.ActivityManager; +import android.app.ActivityManager.RunningServiceInfo; +import android.app.IntentService; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import de.luhmer.owncloudnewsreader.Constants; +import de.luhmer.owncloudnewsreader.SettingsActivity; +import de.luhmer.owncloudnewsreader.reader.IReader; +import de.luhmer.owncloudnewsreader.reader.OnAsyncTaskCompletedListener; +import de.luhmer.owncloudnewsreader.reader.owncloud.API; +import de.luhmer.owncloudnewsreader.reader.owncloud.OwnCloud_Reader; +import de.luhmer.owncloudnewsreader.reader.owncloud.apiv1.APIv1; +import de.luhmer.owncloudnewsreader.reader.owncloud.apiv2.APIv2; + +public class SyncItemStateService extends IntentService { + + IReader _Reader = new OwnCloud_Reader(); + + public SyncItemStateService() { + super(null); + } + + public SyncItemStateService(String name) { + super(name); + } + + @Override + protected void onHandleIntent(Intent intent) { + OwnCloud_Reader ocReader = (OwnCloud_Reader) _Reader; + SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this); + String username = mPrefs.getString(SettingsActivity.EDT_USERNAME_STRING, ""); + String password = mPrefs.getString(SettingsActivity.EDT_PASSWORD_STRING, ""); + ocReader.Start_AsyncTask_GetVersion(Constants.TaskID_GetVersion, this, onAsyncTask_GetVersionFinished, username, password); + } + + OnAsyncTaskCompletedListener onAsyncTask_GetVersionFinished = new OnAsyncTaskCompletedListener() { + + @Override + public void onAsyncTaskCompleted(int task_id, Object task_result) { + + if(!(task_result instanceof Exception)) + { + API api = null; + String appVersion = task_result.toString(); + int versionCode = 0; + if(appVersion != null) + { + appVersion = appVersion.replace(".", ""); + versionCode = Integer.parseInt(appVersion); + } + if (versionCode >= 1101) { + api = new APIv2(SyncItemStateService.this); + } else { + api = new APIv1(SyncItemStateService.this); + } + + ((OwnCloud_Reader)_Reader).setApi(api); + + _Reader.Start_AsyncTask_PerformItemStateChange(Constants.TaskID_PerformStateChange, SyncItemStateService.this, null); + } + } + }; + + + public static boolean isMyServiceRunning(Context context) { + ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); + for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { + if ("de.luhmer.owncloudnewsreader.services.SyncItemStateService".equals(service.service.getClassName())) { + return true; + } + } + return false; + } +} |