Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/news-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid-Development <david-dev@live.de>2014-01-24 12:45:36 +0400
committerDavid-Development <david-dev@live.de>2014-01-24 12:45:36 +0400
commitf61a3827ee7340789e88d0131ddb0d1cd869c139 (patch)
treecaac623e7775f6472c3824d37ad4894a4a9226c3 /News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services
parent6d17fdc09753954b8c2c4dab739aa53d42bbc3b7 (diff)
Update project structure for gradle build system
Diffstat (limited to 'News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services')
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/DownloadImagesService.java233
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncService.aidl16
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/IOwnCloudSyncServiceCallback.aidl12
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudAuthenticatorService.java27
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSettingsSyncService.java26
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/OwnCloudSyncService.java306
-rw-r--r--News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/services/SyncItemStateService.java100
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;
+ }
+}