Update to 0.5.2

This commit is contained in:
David-Development 2013-10-30 10:32:21 +01:00
parent 0eba1c301a
commit 663d4ea60f
28 changed files with 327 additions and 337 deletions

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.luhmer.owncloudnewsreader"
android:versionCode="35"
android:versionName="0.5.0" >
android:versionCode="36"
android:versionName="0.5.1" >
<uses-sdk
android:minSdkVersion="7"
@ -12,6 +12,8 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
@ -59,7 +61,9 @@
android:name="de.luhmer.owncloudnewsreader.SettingsActivity"
android:label="@string/title_activity_settings" >
</activity>
<activity android:name=".DownloadImagesActivity" />
<!--
**********************************************************************
* Sync Adapter and Service

View file

@ -80,16 +80,20 @@ git clone https://github.com/owncloud/News-Android-App.git
Updates
==================================
0.5.1 (in development)
0.5.3 (in development)
---------------------
0.5.2 (Google Play)
---------------------
- Improvement - Notification when background sync is enabled and new items are received
- Improvement - Fix high CPU-Load in Detail-View
0.5.0 (Google Play)
---------------------
- Improvement - <a href="https://github.com/owncloud/News-Android-App/issues/162">#162 New items available notification pops up when there really aren't</a>
- Improvement - <a href="https://github.com/owncloud/News-Android-App/issues/160">#160 Widget font size</a>
- Improvement - <a href="https://github.com/owncloud/News-Android-App/issues/161">#161 'Send via' should be removed from sharing </a>
0.4.11
---------------------
- Critical Bug fix - <a href="https://github.com/owncloud/News-Android-App/issues/158">#158 0.4.10 instantly crashes when opening</a>

View file

@ -8,19 +8,30 @@
var images = document.getElementsByTagName('img');
for (var i = 1; i < images.length; i++) {// i = 1 because of the feed image which has no caption
if(images[i].getAttribute('title') != "") {
if(images[i].getAttribute('title') != "" && images[i].getAttribute('title') != null) {
(function (image) {
var timer;
image.addEventListener('mouseup', function() {
console.log("clear");
clearTimeout(timer);
});
image.addEventListener('mousedown', function () {
timer = window.setTimeout(function() {
alert(image.getAttribute('title'));
image.addEventListener('mousedown', function (e) {
timer = window.setTimeout(function() {
e.preventDefault();
alert(image.getAttribute('title'));
}, 500);
});
image.addEventListener("touchstart", function(e){
timer = window.setTimeout(function() {
e.preventDefault();
alert(image.getAttribute('title'));
}, 500);
});
image.addEventListener('touchend', function() {
clearTimeout(timer);
});
})(images[i]);
}
}

View file

@ -1,49 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--<string name="non_sorted_articles">Nicht zugeordnete Artikel</string>-->
<!--EMAIL-->
<!--Action Bar Items-->
<!--Strings related to login-->
<!--<string name="pref_title_owncloudRootPath">ownCloud root address</string>-->
<!--<string name="pref_default_username">admin</string>-->
<!--Toast Messages-->
<!--Strings related to Settings-->
<!--General settings-->
<!--<string-array name="pref_general_sort_order_values">
<item>desc</item>
<item>asc</item>
</string-array>-->
<!--<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>-->
<!--<string name="pref_title_AllowAllSSLCertificates">Allow all SSL Certificates</string>-->
<!--MemorizingTrustManager-->
<!--Settings for Display-->
<!--Login Dialog-->
<!--Data & Sync-->
<!--<string name="pref_title_data_sync_max_items">Max number of items to sync</string>-->
<!--<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>-->
<!--<string name="pref_title_system_sync_settings">System sync settings</string>-->
<!--Example settings for Notifications-->
<!--<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>-->
</resources>

View file

@ -1,49 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--<string name="non_sorted_articles">Nicht zugeordnete Artikel</string>-->
<!--EMAIL-->
<!--Action Bar Items-->
<!--Strings related to login-->
<!--<string name="pref_title_owncloudRootPath">ownCloud root address</string>-->
<!--<string name="pref_default_username">admin</string>-->
<!--Toast Messages-->
<!--Strings related to Settings-->
<!--General settings-->
<!--<string-array name="pref_general_sort_order_values">
<item>desc</item>
<item>asc</item>
</string-array>-->
<!--<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>-->
<!--<string name="pref_title_AllowAllSSLCertificates">Allow all SSL Certificates</string>-->
<!--MemorizingTrustManager-->
<!--Settings for Display-->
<!--Login Dialog-->
<!--Data & Sync-->
<!--<string name="pref_title_data_sync_max_items">Max number of items to sync</string>-->
<!--<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>-->
<!--<string name="pref_title_system_sync_settings">System sync settings</string>-->
<!--Example settings for Notifications-->
<!--<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>-->
</resources>

View file

@ -1,50 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--<string name="non_sorted_articles">Nicht zugeordnete Artikel</string>-->
<!--EMAIL-->
<!--Action Bar Items-->
<!--Strings related to login-->
<string name="pref_title_password">Secret Code</string>
<!--<string name="pref_title_owncloudRootPath">ownCloud root address</string>-->
<!--<string name="pref_default_username">admin</string>-->
<!--Toast Messages-->
<!--Strings related to Settings-->
<!--General settings-->
<!--<string-array name="pref_general_sort_order_values">
<item>desc</item>
<item>asc</item>
</string-array>-->
<!--<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>-->
<!--<string name="pref_title_AllowAllSSLCertificates">Allow all SSL Certificates</string>-->
<!--MemorizingTrustManager-->
<!--Settings for Display-->
<!--Login Dialog-->
<!--Data & Sync-->
<!--<string name="pref_title_data_sync_max_items">Max number of items to sync</string>-->
<!--<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>-->
<!--<string name="pref_title_system_sync_settings">System sync settings</string>-->
<!--Example settings for Notifications-->
<!--<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>-->
</resources>

View file

@ -1,49 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--<string name="non_sorted_articles">Nicht zugeordnete Artikel</string>-->
<!--EMAIL-->
<!--Action Bar Items-->
<!--Strings related to login-->
<!--<string name="pref_title_owncloudRootPath">ownCloud root address</string>-->
<!--<string name="pref_default_username">admin</string>-->
<!--Toast Messages-->
<!--Strings related to Settings-->
<!--General settings-->
<!--<string-array name="pref_general_sort_order_values">
<item>desc</item>
<item>asc</item>
</string-array>-->
<!--<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>-->
<!--<string name="pref_title_AllowAllSSLCertificates">Allow all SSL Certificates</string>-->
<!--MemorizingTrustManager-->
<!--Settings for Display-->
<!--Login Dialog-->
<!--Data & Sync-->
<!--<string name="pref_title_data_sync_max_items">Max number of items to sync</string>-->
<!--<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>-->
<!--<string name="pref_title_system_sync_settings">System sync settings</string>-->
<!--Example settings for Notifications-->
<!--<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>-->
</resources>

View file

@ -1,49 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--<string name="non_sorted_articles">Nicht zugeordnete Artikel</string>-->
<!--EMAIL-->
<!--Action Bar Items-->
<!--Strings related to login-->
<!--<string name="pref_title_owncloudRootPath">ownCloud root address</string>-->
<!--<string name="pref_default_username">admin</string>-->
<!--Toast Messages-->
<!--Strings related to Settings-->
<!--General settings-->
<!--<string-array name="pref_general_sort_order_values">
<item>desc</item>
<item>asc</item>
</string-array>-->
<!--<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact based on your message history</string>-->
<!--<string name="pref_title_AllowAllSSLCertificates">Allow all SSL Certificates</string>-->
<!--MemorizingTrustManager-->
<!--Settings for Display-->
<!--Login Dialog-->
<!--Data & Sync-->
<!--<string name="pref_title_data_sync_max_items">Max number of items to sync</string>-->
<!--<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>-->
<!--<string name="pref_title_system_sync_settings">System sync settings</string>-->
<!--Example settings for Notifications-->
<!--<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>-->
</resources>

View file

@ -53,7 +53,8 @@
<string name="action_login">Server Settings</string>
<string name="notification_new_items_ticker">You have X new unread items</string>
<string name="notification_new_items_text">X new unread items available</string>
<!-- Strings related to login -->

View file

@ -0,0 +1,44 @@
package de.luhmer.owncloudnewsreader;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import de.luhmer.owncloudnewsreader.reader.owncloud.AsyncTask_GetItems;
/**
* Created by david on 14.10.13.
*/
public class DownloadImagesActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final long highestItemIdBeforeSync = getIntent().getLongExtra("highestItemIdBeforeSync", 0);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle(getString(R.string.no_wifi_available));
// set dialog message
alertDialogBuilder
.setMessage(getString(R.string.do_you_want_to_download_without_wifi))
.setCancelable(true)
.setPositiveButton(getString(android.R.string.yes) ,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
AsyncTask_GetItems.StartDownloadingImages(DownloadImagesActivity.this, highestItemIdBeforeSync);
DownloadImagesActivity.this.finish();
}
})
.setNegativeButton(getString(android.R.string.no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
DownloadImagesActivity.this.finish();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}

View file

@ -277,7 +277,7 @@ public class NewsDetailActivity extends SherlockFragmentActivity {
{
NewsDetailFragment fragment = (NewsDetailFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + currentPosition);
if(fragment != null) // could be null if not instantiated yet
fragment.ResumeVideoPlayers();
fragment.ResumCurrentPage();
}
@ -285,7 +285,7 @@ public class NewsDetailActivity extends SherlockFragmentActivity {
{
NewsDetailFragment fragment = (NewsDetailFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + currentPosition);
if(fragment != null) // could be null if not instantiated yet
fragment.StopVideoPlayers();
fragment.PauseCurrentPage();
}
public void UpdateActionBarIcons()

View file

@ -62,7 +62,7 @@ public class NewsDetailFragment extends SherlockFragment {
private ProgressBar progressbar_webview;
private int section_number;
public NewsDetailFragment() {
public NewsDetailFragment() {
//setRetainInstance(true);
}
@ -72,44 +72,57 @@ public class NewsDetailFragment extends SherlockFragment {
public void onSaveInstanceState(Bundle outState) {
webview.saveState(outState);
}*/
@Override
public void onPause() {
super.onPause();
StopVideoPlayers();
@Override
public void onResume() {
super.onResume();
ResumCurrentPage();
}
@Override
public void onPause() {
super.onPause();
PauseCurrentPage();
}
public void StopVideoPlayers()
{
try {
@Override
public void onDestroy() {
super.onDestroy();
if(webview != null) {
webview.destroy();
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public void PauseCurrentPage()
{
/*
Class.forName("android.webkit.WebView")
.getMethod("onPause", (Class[]) null)
.invoke(webview, (Object[]) null);
*/
if(webview != null)
webview.onPause();
} catch(Exception ex) {
ex.printStackTrace();
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void ResumeVideoPlayers()
{
try {
if(webview != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
webview.onPause();
webview.pauseTimers();
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public void ResumCurrentPage()
{
/*
Class.forName("android.webkit.WebView")
.getMethod("onResume", (Class[]) null)
.invoke(webview, (Object[]) null);
*/
if(webview != null)
webview.onResume();
} catch(Exception ex) {
ex.printStackTrace();
}
}
if(webview != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
webview.onResume();
webview.resumeTimers();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View file

@ -313,6 +313,9 @@ public class NewsReaderDetailFragment extends SherlockListFragment implements IO
onlyStarredItems = true;
DatabaseConnection dbConn = new DatabaseConnection(context);
dbConn.clearDatabaseOverSize();
String sqlSelectStatement = null;
if(idFeed != null)
sqlSelectStatement = dbConn.getAllItemsIdsForFeedSQL(idFeed, onlyUnreadItems, onlyStarredItems, getSortDirection(context));

View file

@ -48,6 +48,7 @@ import org.codechimp.apprater.AppRater;
import de.luhmer.owncloudnewsreader.ListView.SubscriptionExpandableListAdapter;
import de.luhmer.owncloudnewsreader.LoginDialogFragment.LoginSuccessfullListener;
import de.luhmer.owncloudnewsreader.authentication.AccountGeneral;
import de.luhmer.owncloudnewsreader.cursor.NewsListCursorAdapter;
import de.luhmer.owncloudnewsreader.database.DatabaseConnection;
import de.luhmer.owncloudnewsreader.helper.MenuUtilsSherlockFragmentActivity;
import de.luhmer.owncloudnewsreader.helper.ThemeChooser;
@ -498,7 +499,8 @@ public class NewsReaderListActivity extends MenuUtilsSherlockFragmentActivity im
{
NewsReaderDetailFragment nrD = (NewsReaderDetailFragment) getSupportFragmentManager().findFragmentById(R.id.content_frame);
if(nrD != null)
nrD.UpdateCursor();
((NewsListCursorAdapter)nrD.getListAdapter()).notifyDataSetChanged();
//nrD.UpdateCursor();
}

View file

@ -168,7 +168,7 @@ public class NewsReaderListFragment extends SherlockFragment implements OnCreate
int newItemsCount = mPrefs.getInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, 0);
if(newItemsCount > 0) {
MessageBar messageBar = new MessageBar(getActivity(), true);
TextMessage textMessage = new TextMessage(getString(R.string.message_bar_new_articles_available), getString(R.string.message_bar_reload), R.drawable.ic_menu_refresh);
TextMessage textMessage = new TextMessage( newItemsCount + " " + getString(R.string.message_bar_new_articles_available), getString(R.string.message_bar_reload), R.drawable.ic_menu_refresh);
textMessage.setClickListener(mListener);
messageBar.show(textMessage);
}

View file

@ -810,9 +810,9 @@ public class DatabaseConnection {
return database.update(SUBSCRIPTION_TABLE, contentValues, SUBSCRIPTION_ID + "= ?", new String[] { subscription_id });
}
public void insertNewItem (String Titel, String link, String description, Boolean isRead, String ID_SUBSCRIPTION, String ID_RSSITEM, Date timestamp, Boolean isStarred, String guid, String guidHash, String lastModified, String author) {
public void insertNewItem (String title, String link, String description, Boolean isRead, String ID_SUBSCRIPTION, String ID_RSSITEM, Date timestamp, Boolean isStarred, String guid, String guidHash, String lastModified, String author, boolean insertItem) {
ContentValues contentValues = new ContentValues();
contentValues.put(RSS_ITEM_TITLE, Titel);
contentValues.put(RSS_ITEM_TITLE, title);
contentValues.put(RSS_ITEM_LINK, link);
contentValues.put(RSS_ITEM_BODY, description);
contentValues.put(RSS_ITEM_READ, isRead);
@ -828,7 +828,12 @@ public class DatabaseConnection {
contentValues.put(RSS_ITEM_READ_TEMP, isRead);
contentValues.put(RSS_ITEM_STARRED_TEMP, isStarred);
long result = database.insert(RSS_ITEM_TABLE, null, contentValues);
long result = 0;
if(insertItem)
result = database.insert(RSS_ITEM_TABLE, null, contentValues);
else
result = database.update(RSS_ITEM_TABLE, contentValues, RSS_ITEM_RSSITEM_ID + "=?", new String[] { ID_RSSITEM });
Log.d("DatabaseConnection", "Inserted Rows: " + result);
}

View file

@ -0,0 +1,77 @@
package de.luhmer.owncloudnewsreader.helper;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import de.luhmer.owncloudnewsreader.NewsReaderListActivity;
import de.luhmer.owncloudnewsreader.R;
/**
* Created by david on 29.10.13.
*/
public class NotificationManagerNewsReader {
private static NotificationManagerNewsReader instance;
private final int NOTIFICATION_ID = 0;
private Context context;
public static NotificationManagerNewsReader getInstance(Context context)
{
if(instance == null)
instance = new NotificationManagerNewsReader(context);
return instance;
}
public NotificationManagerNewsReader(Context context)
{
this.context = context;
//NOTIFICATION_ID = new Random().nextInt();
//NOTIFICATION_ID = new Random().nextInt();
}
public void ShowMessage(String title, String tickerMessage, String message)
{
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setTicker(tickerMessage)
.setContentTitle(title)
//.setDefaults(Notification.DEFAULT_ALL)
.setAutoCancel(true)
.setContentText(message);
/*
myNotification = new NotificationCompat.Builder(context)
.setContentTitle("Exercise of Notification!")
.setContentText("http://android-er.blogspot.com/")
.setTicker("Notification!")
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_launcher)
.build();
*/
Intent notificationIntent = new Intent(context, NewsReaderListActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID, builder.build());
}
// Remove notification
public void RemoveNotification() {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(NOTIFICATION_ID);
}
}

View file

@ -165,17 +165,20 @@ public class InsertIntoDatabase {
dbConn.closeDatabase();
}
public static void InsertSingleFeedItemIntoDatabase(RssFile rssFile, DatabaseConnection dbConn)
public static boolean InsertSingleFeedItemIntoDatabase(RssFile rssFile, DatabaseConnection dbConn)
{
boolean newItem = false;
if(rssFile != null)
{
Boolean isFeedAlreadyInDatabase = dbConn.doesRssItemAlreadyExsists(rssFile.getItem_Id());
/*
if(isFeedAlreadyInDatabase)
{
int result = dbConn.removeItemByItemId(rssFile.getItem_Id());
Log.d(TAG, "Delete Item: " + result);
}
}*/
String FeedId_Db = dbConn.getRowIdBySubscriptionID(String.valueOf(rssFile.getFeedID()));
//String IdSubscription = dbConn.getIdSubscriptionByStreamID(rssFile.getFeedID());
@ -194,10 +197,15 @@ public class InsertIntoDatabase {
rssFile.getGuid(),
rssFile.getGuidHash(),
rssFile.getLastModified(),
rssFile.getAuthor());
rssFile.getAuthor(),
!isFeedAlreadyInDatabase);
//dbConn.clearDatabaseOverSize();
newItem = !rssFile.getRead();
}
}
return newItem;
}
}

View file

@ -91,7 +91,7 @@ public abstract class API {
return mPrefs.getString(SettingsActivity.EDT_PASSWORD_STRING, null);
}
public int GetFeeds(Context cont, API api) throws Exception {
public int[] GetFeeds(Context cont, API api) throws Exception {
return OwnCloudReaderMethods.GetFeeds(cont, api);
}
@ -103,7 +103,7 @@ public abstract class API {
return OwnCloudReaderMethods.GetItems(tag, cont, offset, getRead, id, type, api);
}
public int GetUpdatedItems(TAGS tag, Context cont, long lastSync, API api) throws Exception {
public int[] GetUpdatedItems(TAGS tag, Context cont, long lastSync, API api) throws Exception {
return OwnCloudReaderMethods.GetUpdatedItems(tag, cont, lastSync, api);
}

View file

@ -22,12 +22,21 @@
package de.luhmer.owncloudnewsreader.reader.owncloud;
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.test.RenamingDelegatingContext;
import de.luhmer.owncloudnewsreader.Constants;
import de.luhmer.owncloudnewsreader.DownloadImagesActivity;
import de.luhmer.owncloudnewsreader.R;
import de.luhmer.owncloudnewsreader.SettingsActivity;
import de.luhmer.owncloudnewsreader.database.DatabaseConnection;
@ -55,7 +64,7 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
//int maxItemsInDatabase = Integer.parseInt(mPrefs.getString(SettingsActivity.SP_MAX_ITEMS_SYNC, "200"));
long lastModified = dbConn.getLastModified();
dbConn.clearDatabaseOverSize();
//dbConn.clearDatabaseOverSize();
//List<RssFile> files;
long offset = dbConn.getLowestItemId(false);
@ -64,21 +73,23 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
int maxSyncSize = Integer.parseInt(OwnCloudReaderMethods.maxSizePerSync);
highestItemIdBeforeSync = dbConn.getHighestItemId();
int totalCount = 0;
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
if(lastModified == 0)
{
int maxItemsInDatabase = Constants.maxItemsCount;
int totalCount = 0;
do {
requestCount = api.GetItems(TAGS.ALL, context, String.valueOf(offset), false, "0", "3", api);
if(requestCount > 0)
offset = dbConn.getLowestItemId(false);
totalCount += requestCount;
} while(requestCount == maxSyncSize);
mPrefs.edit().putInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, totalCount).commit();
do {
offset = dbConn.getLowestItemId(true);
requestCount = api.GetItems(TAGS.ALL_STARRED, context, String.valueOf(offset), true, "0", "2", api);
@ -89,12 +100,11 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
}
else
{
totalCount = api.GetUpdatedItems(TAGS.ALL, context, lastModified + 1, api);
int[] result = api.GetUpdatedItems(TAGS.ALL, context, lastModified + 1, api);
mPrefs.edit().putInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, result[1]).commit();
//OwnCloudReaderMethods.GetUpdatedItems(TAGS.ALL, context, lastModified, api);
}
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
mPrefs.edit().putInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, totalCount).commit();
} catch (Exception ex) {
return ex;
} finally {
@ -116,14 +126,14 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
if(!NetworkConnection.isWLANConnected(context) && NetworkConnection.isNetworkAvailable(context))
ShowDownloadImageWithoutWifiQuestion();
else if(NetworkConnection.isNetworkAvailable(context))
StartDownloadingImages(context);
StartDownloadingImages(context, highestItemIdBeforeSync);
}
detach();
}
private void StartDownloadingImages(Context context)
public static void StartDownloadingImages(Context context, long highestItemIdBeforeSync)
{
DatabaseConnection dbConn = new DatabaseConnection(context);
try {
@ -138,8 +148,31 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
private void ShowDownloadImageWithoutWifiQuestion()
{
final Context contextDownloadImage = this.context;
Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
Intent intent = new Intent(context, DownloadImagesActivity.class);
intent.putExtra("highestItemIdBeforeSync", highestItemIdBeforeSync);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(context.getString(R.string.no_wifi_available))
.setContentText(context.getString(R.string.do_you_want_to_download_without_wifi))
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(bm)
.setContentIntent(pIntent)
.setAutoCancel(true)
.build();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
//final Context contextDownloadImage = this.context;
/*
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
// set title
@ -161,6 +194,7 @@ public class AsyncTask_GetItems extends AsyncTask_Reader {
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
alertDialog.show();
*/
}
}

View file

@ -23,13 +23,14 @@ package de.luhmer.owncloudnewsreader.reader.owncloud;
import org.json.JSONObject;
public class GetVersion_v1 implements IHandleJsonObject {
public class GetVersion_v1 implements IHandleJsonObject {
String version;
@Override
public void performAction(JSONObject jObj) {
public boolean performAction(JSONObject jObj) {
this.version = jObj.optJSONObject("ocs").optJSONObject("data").optString("version");
return true;
}
/**

View file

@ -28,8 +28,9 @@ public class GetVersion_v2 implements IHandleJsonObject {
String version;
@Override
public void performAction(JSONObject jObj) {
public boolean performAction(JSONObject jObj) {
this.version = jObj.optString("version");
return true;
}
/**

View file

@ -24,5 +24,5 @@ package de.luhmer.owncloudnewsreader.reader.owncloud;
import org.json.JSONObject;
public interface IHandleJsonObject {
public void performAction(JSONObject jObj);
public boolean performAction(JSONObject jObj);
}

View file

@ -49,9 +49,10 @@ public class InsertFeedIntoDatabase implements IHandleJsonObject{
}
@Override
public void performAction(JSONObject jObj) {
public boolean performAction(JSONObject jObj) {
ConcreteFeedItem rssFeed = parseFeed(jObj);
feeds.add(rssFeed);
return true;
}
public void WriteAllToDatabaseNow() {

View file

@ -43,8 +43,9 @@ public class InsertFolderIntoDatabase implements IHandleJsonObject{
}
@Override
public void performAction(JSONObject jObj) {
public boolean performAction(JSONObject jObj) {
folders.add(parseFolder(jObj));
return true;
}
public void WriteAllToDatabaseNow() {

View file

@ -59,8 +59,8 @@ public class InsertItemIntoDatabase implements IHandleJsonObject {
}
@Override
public void performAction(JSONObject jObj) {
public boolean performAction(JSONObject jObj) {
RssFile rssFile = parseItem(jObj);
InsertIntoDatabase.InsertSingleFeedItemIntoDatabase(rssFile, dbConn);
return InsertIntoDatabase.InsertSingleFeedItemIntoDatabase(rssFile, dbConn);
}
}

View file

@ -53,7 +53,7 @@ public class OwnCloudReaderMethods {
//private static final String TAG = "OwnCloudReaderMethods";
public static String maxSizePerSync = "200";
public static int GetUpdatedItems(TAGS tag, Context cont, long lastSync, API api) throws Exception
public static int[] GetUpdatedItems(TAGS tag, Context cont, long lastSync, API api) throws Exception
{
List<NameValuePair> nVPairs = new ArrayList<NameValuePair>();
//nVPairs.add(new BasicNameValuePair("batchSize", maxSizePerSync));
@ -83,7 +83,7 @@ public class OwnCloudReaderMethods {
dbConn.closeDatabase();
is.close();
}
return 0;
return new int[] { 0, 0 };
}
//"type": 1, // the type of the query (Feed: 0, Folder: 1, Starred: 2, All: 3)
@ -114,9 +114,9 @@ public class OwnCloudReaderMethods {
try
{
if(api instanceof APIv1)
return readJsonStreamV1(is, new InsertItemIntoDatabase(dbConn));
return readJsonStreamV1(is, new InsertItemIntoDatabase(dbConn))[0];
else if(api instanceof APIv2)
return readJsonStreamV2(is, new InsertItemIntoDatabase(dbConn));
return readJsonStreamV2(is, new InsertItemIntoDatabase(dbConn))[0];
} finally {
dbConn.closeDatabase();
is.close();
@ -129,7 +129,7 @@ public class OwnCloudReaderMethods {
{
InputStream is = HttpJsonRequest.PerformJsonRequest(api.getFolderUrl(), null, api.getUsername(), api.getPassword(), cont);
DatabaseConnection dbConn = new DatabaseConnection(cont);
int result = 0;
int[] result = new int[2];
try
{
InsertFolderIntoDatabase ifid = new InsertFolderIntoDatabase(dbConn);
@ -145,15 +145,15 @@ public class OwnCloudReaderMethods {
is.close();
}
return result;
return result[0];
}
public static int GetFeeds(Context cont, API api) throws Exception
public static int[] GetFeeds(Context cont, API api) throws Exception
{
InputStream inputStream = HttpJsonRequest.PerformJsonRequest(api.getFeedUrl() , null, api.getUsername(), api.getPassword(), cont);
DatabaseConnection dbConn = new DatabaseConnection(cont);
int result = 0;
int result[] = new int[2];
try {
InsertFeedIntoDatabase ifid = new InsertFeedIntoDatabase(dbConn);
@ -174,12 +174,13 @@ public class OwnCloudReaderMethods {
* can parse json like {"items":[{"id":6782}]}
* @param in
* @param iJoBj
* @return
* @return count all, count new items
* @throws IOException
* @throws JSONException
*/
public static int readJsonStreamV2(InputStream in, IHandleJsonObject iJoBj) throws IOException, JSONException {
public static int[] readJsonStreamV2(InputStream in, IHandleJsonObject iJoBj) throws IOException, JSONException {
int count = 0;
int newItemsCount = 0;
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
reader.beginObject();
reader.nextName();
@ -189,8 +190,8 @@ public class OwnCloudReaderMethods {
JSONObject e = getJSONObjectFromReader(reader);
iJoBj.performAction(e);
if(iJoBj.performAction(e))
newItemsCount++;
//reader.endObject();
count++;
}
@ -198,7 +199,7 @@ public class OwnCloudReaderMethods {
//reader.endObject();
reader.close();
return count;
return new int[] { count, newItemsCount };
}
/**
@ -209,8 +210,9 @@ public class OwnCloudReaderMethods {
* @throws IOException
* @throws JSONException
*/
public static int readJsonStreamV1(InputStream in, IHandleJsonObject iJoBj) throws IOException, JSONException {
public static int[] readJsonStreamV1(InputStream in, IHandleJsonObject iJoBj) throws IOException, JSONException {
int count = 0;
int newItemsCount = 0;
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
reader.beginObject();//{
reader.nextName();//"ocs"
@ -229,7 +231,8 @@ public class OwnCloudReaderMethods {
JSONObject e = getJSONObjectFromReader(reader);
iJoBj.performAction(e);
if(iJoBj.performAction(e))
newItemsCount++;
//reader.endObject();
count++;
@ -238,7 +241,7 @@ public class OwnCloudReaderMethods {
//reader.endObject();
reader.close();
return count;
return new int[] { count, newItemsCount };
}
/**
@ -450,6 +453,7 @@ public class OwnCloudReaderMethods {
//Try APIv2
try {
String requestUrl = oc_root_path + OwnCloudConstants.ROOT_PATH_APIv2 + OwnCloudConstants.VERSION_PATH;
requestUrl = API.validateURL(requestUrl);
InputStream is = HttpJsonRequest.PerformJsonRequest(requestUrl, null, username, password, cont);
try {
GetVersion_v2 gv = new GetVersion_v2();
@ -463,6 +467,7 @@ public class OwnCloudReaderMethods {
throw ex;
} catch(Exception ex) { //TODO GET HERE THE RIGHT EXCEPTION
String requestUrl = oc_root_path + OwnCloudConstants.ROOT_PATH_APIv1 + OwnCloudConstants.VERSION_PATH + OwnCloudConstants.JSON_FORMAT;
requestUrl = API.validateURL(requestUrl);
InputStream is = HttpJsonRequest.PerformJsonRequest(requestUrl, null, username, password, cont);
try {
GetVersion_v1 gv = new GetVersion_v1();

View file

@ -24,7 +24,9 @@ package de.luhmer.owncloudnewsreader.services;
import java.util.ArrayList;
import java.util.List;
import android.app.ActivityManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
@ -34,8 +36,10 @@ import android.preference.PreferenceManager;
import android.util.Log;
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;
@ -182,7 +186,24 @@ public class OwnCloudSyncService extends Service {
if(task_result != null)
ThrowException((Exception) task_result);
else
{
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")) {
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(OwnCloudSyncService.this);
int newItemsCount = mPrefs.getInt(Constants.LAST_UPDATE_NEW_ITEMS_COUNT_STRING, 0);
if(newItemsCount > 0) {
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);
NotificationManagerNewsReader.getInstance(OwnCloudSyncService.this).ShowMessage(title, tickerText, contentText);
}
}
}
Log.d(TAG, "onAsyncTask_GetItems Finished");
//fireUpdateFinishedClicked();