, Parcelable {
- String feed_url;
- String title;
- int id;
- int unread;
- boolean has_icon;
- int cat_id;
- int last_updated;
- int order_id;
- boolean is_cat;
+ public String feed_url;
+ public String title;
+ public int id;
+ public int unread;
+ public boolean has_icon;
+ public int cat_id;
+ public int last_updated;
+ public int order_id;
+ public boolean is_cat;
public Feed(int id, String title, boolean is_cat) {
this.id = id;
diff --git a/src/org/fox/ttrss/FeedCategory.java b/src/org/fox/ttrss/types/FeedCategory.java
similarity index 86%
rename from src/org/fox/ttrss/FeedCategory.java
rename to src/org/fox/ttrss/types/FeedCategory.java
index 48c3b554..d4f68bfb 100644
--- a/src/org/fox/ttrss/FeedCategory.java
+++ b/src/org/fox/ttrss/types/FeedCategory.java
@@ -1,13 +1,13 @@
-package org.fox.ttrss;
+package org.fox.ttrss.types;
import android.os.Parcel;
import android.os.Parcelable;
public class FeedCategory implements Parcelable {
- int id;
- String title;
- int unread;
- int order_id;
+ public int id;
+ public String title;
+ public int unread;
+ public int order_id;
public FeedCategory(Parcel in) {
readFromParcel(in);
diff --git a/src/org/fox/ttrss/types/Label.java b/src/org/fox/ttrss/types/Label.java
new file mode 100644
index 00000000..fd4ce930
--- /dev/null
+++ b/src/org/fox/ttrss/types/Label.java
@@ -0,0 +1,9 @@
+package org.fox.ttrss.types;
+
+public class Label {
+ public int id;
+ public String caption;
+ public String fg_color;
+ public String bg_color;
+ public boolean checked;
+}
diff --git a/src/org/fox/ttrss/AppRater.java b/src/org/fox/ttrss/util/AppRater.java
similarity index 96%
rename from src/org/fox/ttrss/AppRater.java
rename to src/org/fox/ttrss/util/AppRater.java
index 2bce4248..a50cc9d9 100644
--- a/src/org/fox/ttrss/AppRater.java
+++ b/src/org/fox/ttrss/util/AppRater.java
@@ -1,4 +1,4 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
// From http://androidsnippets.com/prompt-engaged-users-to-rate-your-app-in-the-android-market-appirater
diff --git a/src/org/fox/ttrss/DatabaseHelper.java b/src/org/fox/ttrss/util/DatabaseHelper.java
similarity index 96%
rename from src/org/fox/ttrss/DatabaseHelper.java
rename to src/org/fox/ttrss/util/DatabaseHelper.java
index 71020078..b8560589 100644
--- a/src/org/fox/ttrss/DatabaseHelper.java
+++ b/src/org/fox/ttrss/util/DatabaseHelper.java
@@ -1,4 +1,4 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
diff --git a/src/org/fox/ttrss/EasySSLSocketFactory.java b/src/org/fox/ttrss/util/EasySSLSocketFactory.java
similarity index 96%
rename from src/org/fox/ttrss/EasySSLSocketFactory.java
rename to src/org/fox/ttrss/util/EasySSLSocketFactory.java
index 2bb6ea14..f0c2d3ad 100644
--- a/src/org/fox/ttrss/EasySSLSocketFactory.java
+++ b/src/org/fox/ttrss/util/EasySSLSocketFactory.java
@@ -1,4 +1,4 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
import java.io.IOException;
import java.net.InetAddress;
diff --git a/src/org/fox/ttrss/EasyX509TrustManager.java b/src/org/fox/ttrss/util/EasyX509TrustManager.java
similarity index 93%
rename from src/org/fox/ttrss/EasyX509TrustManager.java
rename to src/org/fox/ttrss/util/EasyX509TrustManager.java
index 6842a1a6..5ffc19bb 100644
--- a/src/org/fox/ttrss/EasyX509TrustManager.java
+++ b/src/org/fox/ttrss/util/EasyX509TrustManager.java
@@ -1,5 +1,5 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
diff --git a/src/org/fox/ttrss/util/FragmentStatePagerAdapter.java b/src/org/fox/ttrss/util/FragmentStatePagerAdapter.java
new file mode 100644
index 00000000..26494fdc
--- /dev/null
+++ b/src/org/fox/ttrss/util/FragmentStatePagerAdapter.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.fox.ttrss.util;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.PagerAdapter;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+
+/**
+ * Implementation of {@link android.support.v4.view.PagerAdapter} that
+ * uses a {@link Fragment} to manage each page. This class also handles
+ * saving and restoring of fragment's state.
+ *
+ * This version of the pager is more useful when there are a large number
+ * of pages, working more like a list view. When pages are not visible to
+ * the user, their entire fragment may be destroyed, only keeping the saved
+ * state of that fragment. This allows the pager to hold on to much less
+ * memory associated with each visited page as compared to
+ * {@link FragmentPagerAdapter} at the cost of potentially more overhead when
+ * switching between pages.
+ *
+ *
When using FragmentPagerAdapter the host ViewPager must have a
+ * valid ID set.
+ *
+ * Subclasses only need to implement {@link #getItem(int)}
+ * and {@link #getCount()} to have a working adapter.
+ *
+ *
Here is an example implementation of a pager containing fragments of
+ * lists:
+ *
+ * {@sample development/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentStatePagerSupport.java
+ * complete}
+ *
+ *
The R.layout.fragment_pager
resource of the top-level fragment is:
+ *
+ * {@sample development/samples/Support4Demos/res/layout/fragment_pager.xml
+ * complete}
+ *
+ *
The R.layout.fragment_pager_list
resource containing each
+ * individual fragment's layout is:
+ *
+ * {@sample development/samples/Support4Demos/res/layout/fragment_pager_list.xml
+ * complete}
+ */
+public abstract class FragmentStatePagerAdapter extends PagerAdapter {
+ private static final String TAG = "FragmentStatePagerAdapter";
+ private static final boolean DEBUG = false;
+
+ private final FragmentManager mFragmentManager;
+ private FragmentTransaction mCurTransaction = null;
+
+ private ArrayList mSavedState = new ArrayList();
+ private ArrayList mFragments = new ArrayList();
+ private Fragment mCurrentPrimaryItem = null;
+
+ public FragmentStatePagerAdapter(FragmentManager fm) {
+ mFragmentManager = fm;
+ }
+
+ /**
+ * Return the Fragment associated with a specified position.
+ */
+ public abstract Fragment getItem(int position);
+
+ @Override
+ public void startUpdate(ViewGroup container) {
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ // If we already have this item instantiated, there is nothing
+ // to do. This can happen when we are restoring the entire pager
+ // from its saved state, where the fragment manager has already
+ // taken care of restoring the fragments we previously had instantiated.
+ if (mFragments.size() > position) {
+ Fragment f = mFragments.get(position);
+ if (f != null) {
+ return f;
+ }
+ }
+
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+
+ Fragment fragment = getItem(position);
+ if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
+ if (mSavedState.size() > position) {
+ Fragment.SavedState fss = mSavedState.get(position);
+ if (fss != null) {
+ fragment.setInitialSavedState(fss);
+ }
+ }
+ while (mFragments.size() <= position) {
+ mFragments.add(null);
+ }
+ fragment.setMenuVisibility(false);
+ mFragments.set(position, fragment);
+ mCurTransaction.add(container.getId(), fragment);
+
+ return fragment;
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ Fragment fragment = (Fragment)object;
+
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+ if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
+ + " v=" + ((Fragment)object).getView());
+ while (mSavedState.size() <= position) {
+ mSavedState.add(null);
+ }
+ mSavedState.set(position, mFragmentManager.saveFragmentInstanceState(fragment));
+ mFragments.set(position, null);
+
+ mCurTransaction.remove(fragment);
+ }
+
+ @Override
+ public void setPrimaryItem(ViewGroup container, int position, Object object) {
+ Fragment fragment = (Fragment)object;
+ if (fragment != mCurrentPrimaryItem) {
+ if (mCurrentPrimaryItem != null) {
+ fragment.setMenuVisibility(false);
+ }
+ if (fragment != null) {
+ fragment.setMenuVisibility(true);
+ }
+ mCurrentPrimaryItem = fragment;
+ }
+ }
+
+ @Override
+ public void finishUpdate(ViewGroup container) {
+ if (mCurTransaction != null) {
+ mCurTransaction.commitAllowingStateLoss();
+ mCurTransaction = null;
+ mFragmentManager.executePendingTransactions();
+ }
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object object) {
+ return ((Fragment)object).getView() == view;
+ }
+
+ @Override
+ public Parcelable saveState() {
+ Bundle state = null;
+ if (mSavedState.size() > 0) {
+ state = new Bundle();
+ Fragment.SavedState[] fss = new Fragment.SavedState[mSavedState.size()];
+ mSavedState.toArray(fss);
+ state.putParcelableArray("states", fss);
+ }
+ for (int i=0; i keys = bundle.keySet();
+ for (String key: keys) {
+ if (key.startsWith("f")) {
+ int index = Integer.parseInt(key.substring(1));
+ Fragment f = mFragmentManager.getFragment(bundle, key);
+ if (f != null) {
+ while (mFragments.size() <= index) {
+ mFragments.add(null);
+ }
+ f.setMenuVisibility(false);
+ mFragments.set(index, f);
+ } else {
+ Log.w(TAG, "Bad fragment at key " + key);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/org/fox/ttrss/ImageCacheService.java b/src/org/fox/ttrss/util/ImageCacheService.java
similarity index 90%
rename from src/org/fox/ttrss/ImageCacheService.java
rename to src/org/fox/ttrss/util/ImageCacheService.java
index 6b0dc139..1541c249 100644
--- a/src/org/fox/ttrss/ImageCacheService.java
+++ b/src/org/fox/ttrss/util/ImageCacheService.java
@@ -1,4 +1,4 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
import java.io.File;
import java.io.FileOutputStream;
@@ -10,6 +10,12 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
+import org.fox.ttrss.MainActivity;
+import org.fox.ttrss.R;
+import org.fox.ttrss.R.drawable;
+import org.fox.ttrss.R.string;
+import org.fox.ttrss.offline.OfflineDownloadService;
+
import android.app.ActivityManager;
import android.app.IntentService;
import android.app.Notification;
@@ -53,7 +59,7 @@ public class ImageCacheService extends IntentService {
m_nmgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
}
- protected static boolean isUrlCached(String url) {
+ public static boolean isUrlCached(String url) {
String hashedUrl = md5(url);
File storage = Environment.getExternalStorageDirectory();
@@ -63,7 +69,7 @@ public class ImageCacheService extends IntentService {
return file.exists();
}
- protected static String getCacheFileName(String url) {
+ public static String getCacheFileName(String url) {
String hashedUrl = md5(url);
File storage = Environment.getExternalStorageDirectory();
@@ -73,7 +79,7 @@ public class ImageCacheService extends IntentService {
return file.getAbsolutePath();
}
- protected static void cleanupCache(boolean deleteAll) {
+ public static void cleanupCache(boolean deleteAll) {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File storage = Environment.getExternalStorageDirectory();
File cachePath = new File(storage.getAbsolutePath() + CACHE_PATH);
diff --git a/src/org/fox/ttrss/PrefsBackupAgent.java b/src/org/fox/ttrss/util/PrefsBackupAgent.java
similarity index 92%
rename from src/org/fox/ttrss/PrefsBackupAgent.java
rename to src/org/fox/ttrss/util/PrefsBackupAgent.java
index 0a7e5dec..a786be56 100644
--- a/src/org/fox/ttrss/PrefsBackupAgent.java
+++ b/src/org/fox/ttrss/util/PrefsBackupAgent.java
@@ -1,4 +1,4 @@
-package org.fox.ttrss;
+package org.fox.ttrss.util;
import android.app.backup.BackupAgentHelper;
import android.app.backup.SharedPreferencesBackupHelper;