diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2012-09-16 13:25:28 +0400 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2012-09-16 13:25:28 +0400 |
| commit | ced80be1aea975b59db5a0e6dd14acb054e7910e (patch) | |
| tree | f69f8c12151d0ccb9eee7f52d598c6ef626c914c /src/org/fox/ttrss/MainActivity.java | |
| parent | 86a4f6c2dea5700ed3597d9afe280ddb93d56316 (diff) | |
initial
Diffstat (limited to 'src/org/fox/ttrss/MainActivity.java')
| -rw-r--r-- | src/org/fox/ttrss/MainActivity.java | 2313 |
1 files changed, 0 insertions, 2313 deletions
diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java deleted file mode 100644 index 1ac736e2..00000000 --- a/src/org/fox/ttrss/MainActivity.java +++ /dev/null @@ -1,2313 +0,0 @@ -package org.fox.ttrss; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -import org.fox.ttrss.offline.OfflineActivity; -import org.fox.ttrss.offline.OfflineDownloadService; -import org.fox.ttrss.offline.OfflineUploadService; -import org.fox.ttrss.types.Article; -import org.fox.ttrss.types.ArticleList; -import org.fox.ttrss.types.Feed; -import org.fox.ttrss.types.FeedCategory; -import org.fox.ttrss.types.Label; -import org.fox.ttrss.util.AppRater; - -import android.animation.LayoutTransition; -import android.annotation.SuppressLint; -import android.app.ActionBar; -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.content.DialogInterface.OnMultiChoiceClickListener; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.util.Log; -import android.view.ActionMode; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.widget.AdapterView.AdapterContextMenuInfo; -import android.widget.ArrayAdapter; -import android.widget.EditText; -import android.widget.SearchView; -import android.widget.ShareActionProvider; -import android.widget.TextView; -import android.widget.Toast; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.reflect.TypeToken; - -public class MainActivity extends CommonActivity implements OnlineServices { - private final String TAG = this.getClass().getSimpleName(); - - private SharedPreferences m_prefs; - private String m_themeName = ""; - private String m_sessionId; - private Article m_selectedArticle; - private Feed m_activeFeed; - private FeedCategory m_activeCategory; - private Timer m_refreshTimer; - private RefreshTask m_refreshTask; - private Menu m_menu; - private boolean m_unreadOnly = true; - private boolean m_unreadArticlesOnly = true; - private boolean m_enableCats = false; - private int m_apiLevel = 0; - private boolean m_isLoggingIn = false; - private boolean m_isOffline = false; - private int m_offlineModeStatus = 0; - private int m_selectedProduct = -1; - private long m_lastRefresh = 0; - - private ActionMode m_headlinesActionMode; - private HeadlinesActionModeCallback m_headlinesActionModeCallback; - private NavigationListener m_navigationListener; - private NavigationAdapter m_navigationAdapter; - private ArrayList<NavigationEntry> m_navigationEntries = new ArrayList<NavigationEntry>(); - - private class NavigationListener implements ActionBar.OnNavigationListener { - @Override - public boolean onNavigationItemSelected(int itemPosition, long itemId) { - Log.d(TAG, "onNavigationItemSelected: " + itemPosition); - - NavigationEntry entry = m_navigationAdapter.getItem(itemPosition); - entry._onItemSelected(itemPosition, m_navigationAdapter.getCount()-1); - - return false; - } - } - - private class ArticleNavigationEntry extends NavigationEntry { - public ArticleNavigationEntry(Article article) { - super(article.title); - } - - @Override - public void onItemSelected() { - - } - } - - private class RootNavigationEntry extends NavigationEntry { - public RootNavigationEntry(String title) { - super(title); - } - - @Override - public void onItemSelected() { - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - m_activeFeed = null; - m_selectedArticle = null; - m_activeCategory = null; - - if (isSmallScreen()) { - - if (m_enableCats) { - ft.replace(R.id.fragment_container, new FeedCategoriesFragment(), FRAG_CATS); - } else { - ft.replace(R.id.fragment_container, new FeedsFragment(), FRAG_FEEDS); - } - - Fragment hf = getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - if (hf != null) ft.remove(hf); - - Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - if (af != null) ft.remove(af); - - } else { - if (m_enableCats) { - ft.replace(R.id.feeds_fragment, new FeedCategoriesFragment(), FRAG_CATS); - } else { - ft.replace(R.id.feeds_fragment, new FeedsFragment(), FRAG_FEEDS); - } - - findViewById(R.id.article_fragment).setVisibility(View.GONE); - findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); - - ft.replace(R.id.headlines_fragment, new DummyFragment(), ""); - } - - ft.commit(); - initMainMenu(); - } - } - - private class CategoryNavigationEntry extends NavigationEntry { - FeedCategory m_category = null; - - public CategoryNavigationEntry(FeedCategory category) { - super(category.title); - - m_category = category; - } - - @Override - public void onItemSelected() { - m_selectedArticle = null; - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (isSmallScreen()) { - - Fragment hf = getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - if (hf != null) ft.remove(hf); - - Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - if (af != null) ft.remove(af); - - if (m_activeFeed.is_cat) { - FeedCategoriesFragment cats = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - - if (cats != null) { - ft.show(cats); - cats.setSelectedCategory(null); - } - } else { - FeedsFragment feeds = (FeedsFragment) getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - - if (feeds != null) { - ft.show(feeds); - feeds.setSelectedFeed(null); - } - } - - } else { - findViewById(R.id.article_fragment).setVisibility(View.GONE); - findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); - - updateHeadlines(); - - //ft.replace(R.id.headlines_fragment, new DummyFragment(), ""); - } - ft.commit(); - - m_activeFeed = null; - refresh(); - initMainMenu(); - } - } - - private class FeedNavigationEntry extends NavigationEntry { - Feed m_feed = null; - - public FeedNavigationEntry(Feed feed) { - super(feed.title); - - m_feed = feed; - } - - @Override - public void onItemSelected() { - - m_selectedArticle = null; - - if (!isSmallScreen()) - findViewById(R.id.article_fragment).setVisibility(View.GONE); - - viewFeed(m_feed, false); - } - } - - private abstract class NavigationEntry { - private String title = null; - private int timesCalled = 0; - - public void _onItemSelected(int position, int size) { - Log.d(TAG, "_onItemSelected; TC=" + timesCalled + " P/S=" + position + "/" + size); - - if (position == size && timesCalled == 0) { - ++timesCalled; - } else { - onItemSelected(); - } - } - - public NavigationEntry(String title) { - this.title = title; - } - - public String toString() { - return title; - } - - public abstract void onItemSelected(); - } - - private class NavigationAdapter extends ArrayAdapter<NavigationEntry> { - public NavigationAdapter(Context context, int textViewResourceId, ArrayList<NavigationEntry> items) { - super(context, textViewResourceId, items); - } - } - - private class HeadlinesActionModeCallback implements ActionMode.Callback { - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - deselectAllArticles(); - m_headlinesActionMode = null; - } - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.headlines_action_menu, menu); - - return true; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - onOptionsItemSelected(item); - return false; - } - }; - - private BroadcastReceiver m_broadcastReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(Context content, Intent intent) { - - if (intent.getAction().equals(OfflineDownloadService.INTENT_ACTION_SUCCESS)) { - - m_offlineModeStatus = 2; - - switchOffline(); - - } else if (intent.getAction().equals(OfflineUploadService.INTENT_ACTION_SUCCESS)) { - //Log.d(TAG, "offline upload service reports success"); - - refresh(); - - toast(R.string.offline_sync_success); - } - - } - }; - - public void updateHeadlines() { - HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - if (frag != null) { - frag.setActiveArticle(m_selectedArticle); - } - } - - @Override - public int getApiLevel() { - return m_apiLevel; - } - - private boolean hasPendingOfflineData() { - try { - Cursor c = getReadableDb().query("articles", - new String[] { "COUNT(*)" }, "modified = 1", null, null, null, - null); - if (c.moveToFirst()) { - int modified = c.getInt(0); - c.close(); - - return modified > 0; - } - } catch (IllegalStateException e) { - // db is closed? ugh - } - - return false; - } - - private boolean hasOfflineData() { - try { - Cursor c = getReadableDb().query("articles", - new String[] { "COUNT(*)" }, null, null, null, null, null); - if (c.moveToFirst()) { - int modified = c.getInt(0); - c.close(); - - return modified > 0; - } - } catch (IllegalStateException e) { - // db is closed? - } - - return false; - } - - @SuppressWarnings({ "unchecked", "serial" }) - public void saveArticleUnread(final Article article) { - ApiRequest req = new ApiRequest(getApplicationContext()); - - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", String.valueOf(article.id)); - put("mode", article.unread ? "1" : "0"); - put("field", "2"); - } - }; - - req.execute(map); - } - - @SuppressWarnings({ "unchecked", "serial" }) - public void saveArticleMarked(final Article article) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - toast(article.marked ? R.string.notify_article_marked : R.string.notify_article_unmarked); - } - }; - - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", String.valueOf(article.id)); - put("mode", article.marked ? "1" : "0"); - put("field", "0"); - } - }; - - req.execute(map); - } - - @SuppressWarnings({ "unchecked", "serial" }) - public void saveArticlePublished(final Article article) { - - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - toast(article.published ? R.string.notify_article_published : R.string.notify_article_unpublished); - } - }; - - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", String.valueOf(article.id)); - put("mode", article.published ? "1" : "0"); - put("field", "1"); - } - }; - - req.execute(map); - } - - @SuppressWarnings({ "unchecked", "serial" }) - public void saveArticleNote(final Article article, final String note) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - toast(R.string.notify_article_note_set); - } - }; - - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", String.valueOf(article.id)); - put("mode", "1"); - put("data", note); - put("field", "3"); - } - }; - - req.execute(map); - } - - public static String articlesToIdString(ArticleList articles) { - String tmp = ""; - - for (Article a : articles) - tmp += String.valueOf(a.id) + ","; - - return tmp.replaceAll(",$", ""); - } - - @SuppressWarnings("unchecked") - public void catchupFeed(final Feed feed) { - Log.d(TAG, "catchupFeed=" + feed); - - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - refresh(); - } - - }; - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "catchupFeed"); - put("feed_id", String.valueOf(feed.id)); - if (feed.is_cat) - put("is_cat", "1"); - } - }; - - req.execute(map); - } - - @SuppressWarnings("unchecked") - private void toggleArticlesMarked(final ArticleList articles) { - ApiRequest req = new ApiRequest(getApplicationContext()); - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", articlesToIdString(articles)); - put("mode", "2"); - put("field", "0"); - } - }; - - req.execute(map); - } - - @SuppressWarnings("unchecked") - private void toggleArticlesUnread(final ArticleList articles) { - ApiRequest req = new ApiRequest(getApplicationContext()); - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", articlesToIdString(articles)); - put("mode", "2"); - put("field", "2"); - } - }; - - req.execute(map); - refresh(); - } - - @SuppressWarnings("unchecked") - private void toggleArticlesPublished(final ArticleList articles) { - ApiRequest req = new ApiRequest(getApplicationContext()); - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", articlesToIdString(articles)); - put("mode", "2"); - put("field", "1"); - } - }; - - req.execute(map); - } - - private class RefreshTask extends TimerTask { - - @Override - public void run() { - ConnectivityManager cm = (ConnectivityManager) getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - - if (cm.getBackgroundDataSetting()) { - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); - if (networkInfo != null && networkInfo.isAvailable() - && networkInfo.isConnected()) { - - runOnUiThread(new Runnable() { - @Override - public void run() { - refresh(); - } - }); - - } - } - } - } - - private synchronized void refresh() { - Date date = new Date(); - - if (m_sessionId != null && date.getTime() - m_lastRefresh > 5000) { - - FeedsFragment ff = (FeedsFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_FEEDS); - - if (ff != null) { - Log.d(TAG, "Refreshing feeds/" + m_activeFeed); - ff.refresh(true); - } - - FeedCategoriesFragment cf = (FeedCategoriesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_CATS); - - if (cf != null) { - Log.d(TAG, "Refreshing categories/" + m_activeCategory); - cf.refresh(true); - } - - m_lastRefresh = date.getTime(); - } - } - - /* private synchronized void refreshHeadlines() { - if (m_sessionId != null) { - HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - Log.d(TAG, "Refreshing headlines..."); - - if (frag != null) { - frag.refresh(true); - } - } - } */ - - private void setUnreadOnly(boolean unread) { - m_unreadOnly = unread; - m_lastRefresh = 0; - refresh(); - } - - @Override - public boolean getUnreadOnly() { - return m_unreadOnly; - } - - @Override - public boolean getUnreadArticlesOnly() { - return m_unreadArticlesOnly; - } - - @Override - public String getSessionId() { - return m_sessionId; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK")) { - setTheme(R.style.DarkTheme); - } else { - setTheme(R.style.LightTheme); - } - - super.onCreate(savedInstanceState); - - if (OfflineDownloadService.INTENT_ACTION_CANCEL.equals(getIntent().getAction())) { - cancelOfflineSync(); - } - - //Log.d(TAG, "started with intent action=" + intentAction); - - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); - - m_themeName = m_prefs.getString("theme", "THEME_DARK"); - - if (savedInstanceState != null) { - m_sessionId = savedInstanceState.getString("sessionId"); - m_unreadOnly = savedInstanceState.getBoolean("unreadOnly"); - m_activeFeed = savedInstanceState.getParcelable("activeFeed"); - m_selectedArticle = savedInstanceState - .getParcelable("selectedArticle"); - m_unreadArticlesOnly = savedInstanceState - .getBoolean("unreadArticlesOnly"); - m_activeCategory = savedInstanceState - .getParcelable("activeCategory"); - m_apiLevel = savedInstanceState.getInt("apiLevel"); - m_offlineModeStatus = savedInstanceState.getInt("offlineModeStatus"); - } - - m_enableCats = m_prefs.getBoolean("enable_cats", false); - - setContentView(R.layout.main); - - setSmallScreen(findViewById(R.id.headlines_fragment) == null); - - IntentFilter filter = new IntentFilter(); - filter.addAction(OfflineDownloadService.INTENT_ACTION_SUCCESS); - filter.addAction(OfflineUploadService.INTENT_ACTION_SUCCESS); - filter.addCategory(Intent.CATEGORY_DEFAULT); - - registerReceiver(m_broadcastReceiver, filter); - - SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - - m_isOffline = localPrefs.getBoolean("offline_mode_active", false); - - Log.d(TAG, "m_isOffline=" + m_isOffline); - - if (!isCompatMode()) { - - if (!isSmallScreen()) { - findViewById(R.id.feeds_fragment).setVisibility(m_selectedArticle != null && (isPortrait() || isSmallTablet()) ? View.GONE : View.VISIBLE); - findViewById(R.id.article_fragment).setVisibility(m_selectedArticle != null ? View.VISIBLE : View.GONE); - } - - LayoutTransition transitioner = new LayoutTransition(); - ((ViewGroup) findViewById(R.id.fragment_container)).setLayoutTransition(transitioner); - - m_navigationAdapter = new NavigationAdapter(this, android.R.layout.simple_spinner_dropdown_item, m_navigationEntries); - - m_headlinesActionModeCallback = new HeadlinesActionModeCallback(); - m_navigationListener = new NavigationListener(); - - getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); - getActionBar().setListNavigationCallbacks(m_navigationAdapter, m_navigationListener); - } - - if (isSmallScreen()) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - // temporary workaround against viewpager going a bit crazy when restoring after rotation - if (m_selectedArticle != null) { - ft.remove(getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE)); - m_selectedArticle = null; - } - - if (m_activeFeed != null) { - if (m_activeFeed.is_cat) { - ft.hide(getSupportFragmentManager().findFragmentByTag(FRAG_CATS)); - } else { - ft.hide(getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS)); - } - } - ft.commit(); - } - - if (m_isOffline) { - Intent offline = new Intent(MainActivity.this, - OfflineActivity.class); - startActivity(offline); - finish(); - } else { - //AppRater.showRateDialog(this, null); - AppRater.appLaunched(this); - - if (m_sessionId != null) { - loginSuccess(); - } else { - //login(); -- handled in onResume() - } - } - } - - private void switchOffline() { - if (m_offlineModeStatus == 2) { - - AlertDialog.Builder builder = new AlertDialog.Builder( - MainActivity.this) - .setMessage(R.string.dialog_offline_success) - .setPositiveButton(R.string.dialog_offline_go, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - m_offlineModeStatus = 0; - - SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = localPrefs.edit(); - editor.putBoolean("offline_mode_active", true); - editor.commit(); - - Intent refresh = new Intent( - MainActivity.this, - OfflineActivity.class); - startActivity(refresh); - finish(); - } - }) - .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - m_offlineModeStatus = 0; - - } - }); - - AlertDialog dlg = builder.create(); - dlg.show(); - - } else if (m_offlineModeStatus == 0) { - - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setMessage(R.string.dialog_offline_switch_prompt) - .setPositiveButton(R.string.dialog_offline_go, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - if (m_sessionId != null) { - Log.d(TAG, "offline: starting"); - - m_offlineModeStatus = 1; - - Intent intent = new Intent( - MainActivity.this, - OfflineDownloadService.class); - intent.putExtra("sessionId", m_sessionId); - - startService(intent); - } - } - }) - .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - // - } - }); - - AlertDialog dlg = builder.create(); - dlg.show(); - } else if (m_offlineModeStatus == 1) { - cancelOfflineSync(); - } - } - - private void cancelOfflineSync() { - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setMessage(R.string.dialog_offline_sync_in_progress) - .setNegativeButton(R.string.dialog_offline_sync_stop, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - if (m_sessionId != null) { - Log.d(TAG, "offline: stopping"); - - m_offlineModeStatus = 0; - - Intent intent = new Intent( - MainActivity.this, - OfflineDownloadService.class); - - stopService(intent); - - dialog.dismiss(); - - restart(); - } - } - }) - .setPositiveButton(R.string.dialog_offline_sync_continue, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - dialog.dismiss(); - - restart(); - } - }); - - AlertDialog dlg = builder.create(); - dlg.show(); - } - - private void switchOfflineSuccess() { - logout(); - // setLoadingStatus(R.string.blank, false); - - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("offline_mode_active", true); - editor.commit(); - - Intent offline = new Intent(MainActivity.this, OfflineActivity.class); - startActivity(offline); - finish(); - - } - - private void setLoadingStatus(int status, boolean showProgress) { - TextView tv = (TextView) findViewById(R.id.loading_message); - - if (tv != null) { - tv.setText(status); - } - - setProgressBarIndeterminateVisibility(showProgress); - } - - @Override - public void onSaveInstanceState(Bundle out) { - super.onSaveInstanceState(out); - - out.putString("sessionId", m_sessionId); - out.putBoolean("unreadOnly", m_unreadOnly); - out.putParcelable("activeFeed", m_activeFeed); - out.putParcelable("selectedArticle", m_selectedArticle); - out.putBoolean("unreadArticlesOnly", m_unreadArticlesOnly); - out.putParcelable("activeCategory", m_activeCategory); - out.putInt("apiLevel", m_apiLevel); - out.putInt("offlineModeStatus", m_offlineModeStatus); - } - - @Override - public void onResume() { - super.onResume(); - - boolean needRefresh = !m_prefs.getString("theme", "THEME_DARK").equals( - m_themeName) - || m_prefs.getBoolean("enable_cats", false) != m_enableCats; - - if (needRefresh) { - restart(); - } else if (m_sessionId != null) { - m_refreshTask = new RefreshTask(); - m_refreshTimer = new Timer("Refresh"); - - m_refreshTimer.schedule(m_refreshTask, 60 * 1000L, 120 * 1000L); - } else { - if (!m_isLoggingIn) { - login(); - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_menu, menu); - - m_menu = menu; - - initMainMenu(); - - MenuItem item = menu.findItem(R.id.show_feeds); - - if (getUnreadOnly()) { - item.setTitle(R.string.menu_all_feeds); - } else { - item.setTitle(R.string.menu_unread_feeds); - } - - /* - * item = menu.findItem(R.id.show_all_articles); - * - * if (getUnreadArticlesOnly()) { - * item.setTitle(R.string.show_all_articles); } else { - * item.setTitle(R.string.show_unread_articles); } - */ - - return true; - } - - private void setMenuLabel(int id, int labelId) { - MenuItem mi = m_menu.findItem(id); - - if (mi != null) { - mi.setTitle(labelId); - } - } - - @Override - public void onBackPressed() { - goBack(true); - } - - private void closeCategory() { - m_activeCategory = null; - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - if (isSmallScreen()) { - ft.replace(R.id.fragment_container, new FeedCategoriesFragment(), FRAG_CATS); - } else { - ft.replace(R.id.feeds_fragment, new FeedCategoriesFragment(), FRAG_CATS); - } - ft.commit(); - - initMainMenu(); - refresh(); - } - - private void deselectAllArticles() { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - if (selected.size() > 0) { - selected.clear(); - initMainMenu(); - updateHeadlines(); - } - } - } - - private void goBack(boolean allowQuit) { - if (isSmallScreen()) { - if (m_selectedArticle != null) { - closeArticle(); - } else if (m_activeFeed != null) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - if (m_activeFeed.is_cat) { - - Fragment headlines = getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - FeedCategoriesFragment cats = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - - ft.show(cats); - ft.remove(headlines); - - } else { - Fragment headlines = getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - FeedsFragment feeds = (FeedsFragment) getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - - ft.show(feeds); - ft.remove(headlines); - } - ft.commit(); - - m_activeFeed = null; - - refresh(); - - initMainMenu(); - - } else if (m_activeCategory != null) { - closeCategory(); - } else if (allowQuit) { - finish(); - } - } else { - if (m_selectedArticle != null) { - closeArticle(); - refresh(); - } else if (m_activeFeed != null) { - closeFeed(); - } else if (m_activeCategory != null) { - closeCategory(); - } else if (allowQuit) { - finish(); - } - } - } - - - private void closeFeed() { - if (m_activeFeed != null) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.headlines_fragment, new DummyFragment(), ""); - ft.commit(); - - if (m_activeFeed.is_cat) { - FeedCategoriesFragment cats = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - if (cats != null) { - cats.setSelectedCategory(null); - } - } else { - FeedsFragment feeds = (FeedsFragment) getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - if (feeds != null) { - feeds.setSelectedFeed(null); - } - } - - m_activeFeed = null; - - initMainMenu(); - } - } - - - @SuppressWarnings("unchecked") - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - switch (item.getItemId()) { - case R.id.close_feed: - if (m_activeFeed != null) { - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.headlines_fragment, new DummyFragment(), ""); - ft.commit(); - - if (m_activeFeed.is_cat) { - FeedCategoriesFragment cats = (FeedCategoriesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - cats.setSelectedCategory(null); - } else { - FeedsFragment feeds = (FeedsFragment) getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - feeds.setSelectedFeed(null); - } - - m_activeFeed = null; - - initMainMenu(); - } - return true; - case R.id.close_article: - closeArticle(); - return true; - case android.R.id.home: - goBack(false); - return true; - case R.id.search: - if (hf != null && isCompatMode()) { - Dialog dialog = new Dialog(this); - - final EditText edit = new EditText(this); - - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setTitle(R.string.search) - .setPositiveButton(getString(R.string.search), - new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, - int which) { - - String query = edit.getText().toString().trim(); - - hf.setSearchQuery(query); - - } - }) - .setNegativeButton(getString(R.string.cancel), - new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, - int which) { - - // - - } - }).setView(edit); - - dialog = builder.create(); - dialog.show(); - } - - return true; - case R.id.preferences: - Intent intent = new Intent(MainActivity.this, - PreferencesActivity.class); - startActivityForResult(intent, 0); - return true; - case R.id.update_feeds: - m_lastRefresh = 0; - refresh(); - return true; - case R.id.logout: - logout(); - return true; - case R.id.login: - login(); - return true; - case R.id.go_offline: - switchOffline(); - return true; - case R.id.article_set_note: - if (m_selectedArticle != null) { - editArticleNote(m_selectedArticle); - } - return true; - case R.id.headlines_select: - if (hf != null) { - Dialog dialog = new Dialog(this); - AlertDialog.Builder builder = new AlertDialog.Builder(this) - .setTitle(R.string.headlines_select_dialog) - .setSingleChoiceItems( - new String[] { - getString(R.string.headlines_select_all), - getString(R.string.headlines_select_unread), - getString(R.string.headlines_select_none) }, - 0, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - switch (which) { - case 0: - hf.setSelection(HeadlinesFragment.ArticlesSelection.ALL); - break; - case 1: - hf.setSelection(HeadlinesFragment.ArticlesSelection.UNREAD); - break; - case 2: - hf.setSelection(HeadlinesFragment.ArticlesSelection.NONE); - break; - } - dialog.cancel(); - initMainMenu(); - } - }); - - dialog = builder.create(); - dialog.show(); - } - return true; - case R.id.headlines_mark_as_read: - if (hf != null) { - ArticleList articles = hf.getUnreadArticles(); - - for (Article a : articles) - a.unread = false; - - updateHeadlines(); - - ApiRequest req = new ApiRequest(getApplicationContext()); - - final String articleIds = articlesToIdString(articles); - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "updateArticle"); - put("article_ids", articleIds); - put("mode", "0"); - put("field", "2"); - } - }; - - req.execute(map); - refresh(); - } - return true; - case R.id.share_article: - if (android.os.Build.VERSION.SDK_INT < 14) { - shareArticle(m_selectedArticle); - } - return true; - case R.id.toggle_marked: - if (m_selectedArticle != null) { - m_selectedArticle.marked = !m_selectedArticle.marked; - saveArticleMarked(m_selectedArticle); - updateHeadlines(); - } - return true; - case R.id.selection_select_none: - deselectAllArticles(); - return true; - case R.id.selection_toggle_unread: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.unread = !a.unread; - - toggleArticlesUnread(selected); - updateHeadlines(); - } - refresh(); - } - return true; - case R.id.selection_toggle_marked: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.marked = !a.marked; - - toggleArticlesMarked(selected); - updateHeadlines(); - } - } - return true; - case R.id.selection_toggle_published: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.published = !a.published; - - toggleArticlesPublished(selected); - updateHeadlines(); - } - } - return true; - case R.id.toggle_published: - if (m_selectedArticle != null) { - m_selectedArticle.published = !m_selectedArticle.published; - saveArticlePublished(m_selectedArticle); - updateHeadlines(); - } - return true; - case R.id.catchup_above: - if (hf != null) { - if (m_selectedArticle != null) { - ArticleList articles = hf.getAllArticles(); - ArticleList tmp = new ArticleList(); - for (Article a : articles) { - a.unread = false; - tmp.add(a); - if (m_selectedArticle.id == a.id) - break; - } - if (tmp.size() > 0) { - toggleArticlesUnread(tmp); - updateHeadlines(); - } - } - } - return true; - case R.id.set_unread: - if (m_selectedArticle != null) { - m_selectedArticle.unread = true; - saveArticleUnread(m_selectedArticle); - updateHeadlines(); - } - return true; - case R.id.show_feeds: - setUnreadOnly(!getUnreadOnly()); - - if (getUnreadOnly()) { - item.setTitle(R.string.menu_all_feeds); - } else { - item.setTitle(R.string.menu_unread_feeds); - } - - return true; - case R.id.set_labels: - if (m_selectedArticle != null) { - editArticleLabels(m_selectedArticle); - } - return true; - default: - Log.d(TAG, - "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - } - - private void editArticleNote(final Article article) { - String note = ""; - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(article.title); - final EditText topicEdit = new EditText(this); - topicEdit.setText(note); - builder.setView(topicEdit); - - builder.setPositiveButton(R.string.article_set_note, new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - saveArticleNote(article, topicEdit.getText().toString().trim()); - article.published = true; - saveArticlePublished(article); - updateHeadlines(); - } - }); - - builder.setNegativeButton(R.string.dialog_cancel, new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - // - } - }); - - AlertDialog dialog = builder.create(); - dialog.show(); - } - - private void editArticleLabels(Article article) { - final int articleId = article.id; - - ApiRequest req = new ApiRequest(getApplicationContext()) { - @Override - protected void onPostExecute(JsonElement result) { - if (result != null) { - Type listType = new TypeToken<List<Label>>() {}.getType(); - final List<Label> labels = new Gson().fromJson(result, listType); - - CharSequence[] items = new CharSequence[labels.size()]; - final int[] itemIds = new int[labels.size()]; - boolean[] checkedItems = new boolean[labels.size()]; - - for (int i = 0; i < labels.size(); i++) { - items[i] = labels.get(i).caption; - itemIds[i] = labels.get(i).id; - checkedItems[i] = labels.get(i).checked; - } - - Dialog dialog = new Dialog(MainActivity.this); - AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) - .setTitle(R.string.article_set_labels) - .setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which, final boolean isChecked) { - final int labelId = itemIds[which]; - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "setArticleLabel"); - put("label_id", String.valueOf(labelId)); - put("article_ids", String.valueOf(articleId)); - if (isChecked) put("assign", "true"); - } - }; - - ApiRequest req = new ApiRequest(m_context); - req.execute(map); - - } - }).setPositiveButton(R.string.dialog_close, new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }); - - dialog = builder.create(); - dialog.show(); - - } - } - }; - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "getLabels"); - put("article_id", String.valueOf(articleId)); - } - }; - - req.execute(map); - } - - private Intent getShareIntent(Article article) { - Intent intent = new Intent(Intent.ACTION_SEND); - - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_SUBJECT, article.title); - intent.putExtra(Intent.EXTRA_TEXT, article.link); - - return intent; - } - - private void shareArticle(Article article) { - if (article != null) { - - Intent intent = getShareIntent(article); - - startActivity(Intent.createChooser(intent, - getString(R.string.share_article))); - } - } - - private void closeArticle() { - m_selectedArticle = null; - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (isSmallScreen()) { - ft.remove(getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE)); - ft.show(getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES)); - } else { - findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); - findViewById(R.id.article_fragment).setVisibility(View.GONE); - ft.replace(R.id.article_fragment, new DummyFragment(), FRAG_ARTICLE); - - updateHeadlines(); - } - ft.commit(); - - initMainMenu(); - } - - private void updateTitle() { - if (!isCompatMode()) { - - m_navigationAdapter.clear(); - - if (m_activeCategory != null || (m_activeFeed != null && (isSmallScreen() || isPortrait()))) { - getActionBar().setDisplayShowTitleEnabled(false); - getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); - - m_navigationAdapter.add(new RootNavigationEntry(getString(R.string.app_name))); - - if (m_activeCategory != null) - m_navigationAdapter.add(new CategoryNavigationEntry(m_activeCategory)); - - if (m_activeFeed != null) - m_navigationAdapter.add(new FeedNavigationEntry(m_activeFeed)); - - //if (m_selectedArticle != null) - // m_navigationAdapter.add(new ArticleNavigationEntry(m_selectedArticle)); - - getActionBar().setSelectedNavigationItem(getActionBar().getNavigationItemCount()); - - } else { - getActionBar().setDisplayShowTitleEnabled(true); - getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); - getActionBar().setTitle(R.string.app_name); - } - - if (isSmallScreen()) { - getActionBar().setDisplayHomeAsUpEnabled(m_selectedArticle != null || m_activeCategory != null || m_activeFeed != null); - } else { - getActionBar().setDisplayHomeAsUpEnabled(m_selectedArticle != null || m_activeCategory != null); - } - - } else { - if (m_activeFeed != null) { - setTitle(m_activeFeed.title); - } else if (m_activeCategory != null) { - setTitle(m_activeCategory.title); - } else { - setTitle(R.string.app_name); - } - } - } - - @SuppressLint({ "NewApi", "NewApi", "NewApi" }) - public void initMainMenu() { - if (m_menu != null) { - - m_menu.setGroupVisible(R.id.menu_group_feeds, false); - m_menu.setGroupVisible(R.id.menu_group_headlines, false); - m_menu.setGroupVisible(R.id.menu_group_headlines_selection, false); - m_menu.setGroupVisible(R.id.menu_group_article, false); - - if (m_sessionId != null) { - - m_menu.setGroupVisible(R.id.menu_group_logged_in, true); - m_menu.setGroupVisible(R.id.menu_group_logged_out, false); - - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - int numSelected = 0; - - if (hf != null) - numSelected = hf.getSelectedArticles().size(); - - if (numSelected != 0) { - if (isCompatMode()) { - m_menu.setGroupVisible(R.id.menu_group_headlines_selection, true); - } else { - if (m_headlinesActionMode == null) - m_headlinesActionMode = startActionMode(m_headlinesActionModeCallback); - } - - } else if (m_selectedArticle != null) { - m_menu.setGroupVisible(R.id.menu_group_article, true); - m_menu.findItem(R.id.close_article).setVisible(!isSmallScreen()); - - if (android.os.Build.VERSION.SDK_INT >= 14) { - ShareActionProvider shareProvider = (ShareActionProvider) m_menu.findItem(R.id.share_article).getActionProvider(); - - if (m_selectedArticle != null) { - Log.d(TAG, "setting up share provider"); - shareProvider.setShareIntent(getShareIntent(m_selectedArticle)); - - if (!m_prefs.getBoolean("tablet_article_swipe", false) && !isSmallScreen()) { - m_menu.findItem(R.id.share_article).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - } - } - } - - } else if (m_activeFeed != null) { - m_menu.setGroupVisible(R.id.menu_group_headlines, true); - m_menu.findItem(R.id.close_feed).setVisible(!isSmallScreen()); - - MenuItem search = m_menu.findItem(R.id.search); - - search.setEnabled(m_apiLevel >= 2); - - if (!isCompatMode()) { - SearchView searchView = (SearchView) search.getActionView(); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - private String query = ""; - - @Override - public boolean onQueryTextSubmit(String query) { - HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (frag != null) { - frag.setSearchQuery(query); - this.query = query; - } - - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - if (newText.equals("") && !newText.equals(this.query)) { - HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (frag != null) { - frag.setSearchQuery(newText); - this.query = newText; - } - } - - return false; - } - }); - } - - } else { - m_menu.setGroupVisible(R.id.menu_group_feeds, true); - } - - if (numSelected == 0 && m_headlinesActionMode != null) { - m_headlinesActionMode.finish(); - } - - //Log.d(TAG, "isCompatMode=" + isCompatMode()); - - - m_menu.findItem(R.id.set_labels).setEnabled(m_apiLevel >= 1); - m_menu.findItem(R.id.article_set_note).setEnabled(m_apiLevel >= 1); - - } else { - m_menu.setGroupVisible(R.id.menu_group_logged_in, false); - m_menu.setGroupVisible(R.id.menu_group_logged_out, true); - } - } - - updateTitle(); - } - - @Override - public void onPause() { - super.onPause(); - - if (m_refreshTask != null) { - m_refreshTask.cancel(); - m_refreshTask = null; - } - - if (m_refreshTimer != null) { - m_refreshTimer.cancel(); - m_refreshTimer = null; - } - - } - - @Override - public void onDestroy() { - super.onDestroy(); - - unregisterReceiver(m_broadcastReceiver); - } - - private void syncOfflineData() { - Log.d(TAG, "offlineSync: starting"); - - Intent intent = new Intent( - MainActivity.this, - OfflineUploadService.class); - - intent.putExtra("sessionId", m_sessionId); - - startService(intent); - } - - private void loginSuccess() { - findViewById(R.id.loading_container).setVisibility(View.GONE); - setProgressBarIndeterminateVisibility(false); - - m_isOffline = false; - - initMainMenu(); - - if (m_refreshTask != null) { - m_refreshTask.cancel(); - m_refreshTask = null; - } - - if (m_refreshTimer != null) { - m_refreshTimer.cancel(); - m_refreshTimer = null; - } - - m_refreshTask = new RefreshTask(); - m_refreshTimer = new Timer("Refresh"); - - m_refreshTimer.schedule(m_refreshTask, 60 * 1000L, 120 * 1000L); - } - - - private class LoginRequest extends ApiRequest { - public LoginRequest(Context context) { - super(context); - } - - @SuppressWarnings("unchecked") - protected void onPostExecute(JsonElement result) { - m_isLoggingIn = false; - - if (result != null) { - try { - JsonObject content = result.getAsJsonObject(); - if (content != null) { - m_sessionId = content.get("session_id").getAsString(); - - Log.d(TAG, "Authenticated!"); - - ApiRequest req = new ApiRequest(m_context) { - protected void onPostExecute(JsonElement result) { - m_apiLevel = 0; - - if (result != null) { - try { - m_apiLevel = result.getAsJsonObject() - .get("level").getAsInt(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - Log.d(TAG, "Received API level: " + m_apiLevel); - - if (hasPendingOfflineData()) - syncOfflineData(); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (m_enableCats) { - FeedCategoriesFragment frag = new FeedCategoriesFragment(); - if (isSmallScreen()) { - ft.replace(R.id.fragment_container, frag, FRAG_CATS); - } else { - ft.replace(R.id.feeds_fragment, frag, FRAG_CATS); - } - - } else { - FeedsFragment frag = new FeedsFragment(); - if (isSmallScreen()) { - ft.replace(R.id.fragment_container, frag, FRAG_FEEDS); - } else { - ft.replace(R.id.feeds_fragment, frag, FRAG_FEEDS); - } - } - - try { - ft.commit(); - } catch (IllegalStateException e) { - e.printStackTrace(); - } - - loginSuccess(); - - } - }; - - @SuppressWarnings("serial") - HashMap<String, String> map = new HashMap<String, String>() { - { - put("sid", m_sessionId); - put("op", "getApiLevel"); - } - }; - - req.execute(map); - - setLoadingStatus(R.string.loading_message, true); - - return; - } - - } catch (Exception e) { - e.printStackTrace(); - } - } - - m_sessionId = null; - - setLoadingStatus(getErrorMessage(), false); - - if (hasOfflineData()) { - - AlertDialog.Builder builder = new AlertDialog.Builder( - MainActivity.this) - .setMessage(R.string.dialog_offline_prompt) - .setPositiveButton(R.string.dialog_offline_go, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - switchOfflineSuccess(); - } - }) - .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - // - } - }); - - AlertDialog dlg = builder.create(); - dlg.show(); - } - - // m_menu.findItem(R.id.login).setVisible(true); - } - - } - - @Override - public void onFeedSelected(Feed feed) { - viewFeed(feed, false); - } - - public void viewFeed(Feed feed, boolean append) { - Log.d(TAG, "viewFeeed/" + feed.id); - - m_activeFeed = feed; - - if (!append) { - //m_selectedArticle = null; - - if (m_menu != null) { - MenuItem search = m_menu.findItem(R.id.search); - - if (search != null && !isCompatMode()) { - SearchView sv = (SearchView) search.getActionView(); - sv.setQuery("", false); - } - } - - HeadlinesFragment hf = new HeadlinesFragment(feed); - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - if (isSmallScreen()) { - Fragment cats = getSupportFragmentManager().findFragmentByTag(FRAG_CATS); - if (cats != null) ft.hide(cats); - - Fragment feeds = getSupportFragmentManager().findFragmentByTag(FRAG_FEEDS); - if (feeds != null) ft.hide(feeds); - - ft.add(R.id.fragment_container, hf, FRAG_HEADLINES); - } else { - //findViewById(R.id.article_fragment).setVisibility(View.GONE); - findViewById(R.id.headlines_fragment).setVisibility(View.VISIBLE); - ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); - } - ft.commit(); - - } else { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - if (hf != null) { - hf.refresh(true); - } - } - - initMainMenu(); - } - - public void viewCategory(FeedCategory cat, boolean openAsFeed) { - - Log.d(TAG, "viewCategory"); - - if (!openAsFeed) { - m_activeCategory = cat; - - FeedsFragment frag = new FeedsFragment(cat); - - FragmentTransaction ft = getSupportFragmentManager() - .beginTransaction(); - - if (isSmallScreen()) { - ft.replace(R.id.fragment_container, frag, FRAG_FEEDS); - } else { - ft.replace(R.id.feeds_fragment, frag, FRAG_FEEDS); - } - ft.commit(); - - } else { - Feed feed = new Feed(cat.id, cat.title, true); - - if (m_menu != null) { - MenuItem search = m_menu.findItem(R.id.search); - - if (search != null && !isCompatMode()) { - SearchView sv = (SearchView) search.getActionView(); - sv.setQuery("", false); - } - } - viewFeed(feed, false); - } - - initMainMenu(); - } - - @Override - public void onArticleSelected(Article article) { - openArticle(article); - } - - public void openArticle(Article article) { - m_selectedArticle = article; - - if (article.unread) { - article.unread = false; - saveArticleUnread(article); - } - - initMainMenu(); - - Fragment frag; - - if (isSmallScreen() || m_prefs.getBoolean("tablet_article_swipe", false)) { - frag = new ArticlePager(article); - } else { - frag = new ArticleFragment(article); - } - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - if (isSmallScreen()) { - ft.hide(getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES)); - ft.add(R.id.fragment_container, frag, FRAG_ARTICLE); - } else { - findViewById(R.id.feeds_fragment).setVisibility(isPortrait() || isSmallTablet() ? View.GONE : View.VISIBLE); - findViewById(R.id.article_fragment).setVisibility(View.VISIBLE); - ft.replace(R.id.article_fragment, frag, FRAG_ARTICLE); - - if (!isPortrait()) refresh(); - } - ft.commit(); - } - - /* private Feed getActiveFeed() { - return m_activeFeed; - } - - private FeedCategory getActiveCategory() { - return m_activeCategory; - } */ - - private void logout() { - if (m_refreshTask != null) { - m_refreshTask.cancel(); - m_refreshTask = null; - } - - if (m_refreshTimer != null) { - m_refreshTimer.cancel(); - m_refreshTimer = null; - } - - m_sessionId = null; - - findViewById(R.id.loading_container).setVisibility(View.VISIBLE); - - TextView tv = (TextView) findViewById(R.id.loading_message); - - if (tv != null) { - tv.setText(R.string.login_ready); - } - - initMainMenu(); - } - - @Override - @SuppressWarnings({ "unchecked", "serial" }) - public void login() { - - logout(); - - if (m_prefs.getString("ttrss_url", "").trim().length() == 0) { - - setLoadingStatus(R.string.login_need_configure, false); - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(R.string.dialog_need_configure_prompt) - .setCancelable(false) - .setPositiveButton(R.string.dialog_open_preferences, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - // launch preferences - - Intent intent = new Intent(MainActivity.this, - PreferencesActivity.class); - startActivityForResult(intent, 0); - } - }) - .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - - } else { - - LoginRequest ar = new LoginRequest(getApplicationContext()); - - HashMap<String, String> map = new HashMap<String, String>() { - { - put("op", "login"); - put("user", m_prefs.getString("login", "").trim()); - put("password", m_prefs.getString("password", "").trim()); - } - }; - - ar.execute(map); - - setLoadingStatus(R.string.login_in_progress, true); - - m_isLoggingIn = true; - } - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - AdapterContextMenuInfo info = (AdapterContextMenuInfo) item - .getMenuInfo(); - - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - FeedsFragment ff = (FeedsFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_FEEDS); - FeedCategoriesFragment cf = (FeedCategoriesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_CATS); - - switch (item.getItemId()) { - case R.id.article_link_copy: - if (true) { - Article article = null; - - if (m_selectedArticle != null) { - article = m_selectedArticle; - } else if (info != null) { - article = hf.getArticleAtPosition(info.position); - } - - if (article != null) { - copyToClipboard(article.link); - } - } - return true; - case R.id.article_link_share: - if (m_selectedArticle != null) { - shareArticle(m_selectedArticle); - } - return true; - case R.id.set_labels: - if (true) { - Article article = null; - - if (m_selectedArticle != null) { - article = m_selectedArticle; - } else if (info != null) { - article = hf.getArticleAtPosition(info.position); - } - - if (article != null) { - editArticleLabels(article); - } - } - return true; - case R.id.article_set_note: - if (true) { - Article article = null; - - if (m_selectedArticle != null) { - article = m_selectedArticle; - } else if (info != null) { - article = hf.getArticleAtPosition(info.position); - } - - if (article != null) { - editArticleNote(article); - } - } - return true; - case R.id.browse_articles: - if (cf != null) { - FeedCategory cat = cf.getCategoryAtPosition(info.position); - if (cat != null) { - viewCategory(cat, true); - cf.setSelectedCategory(cat); - } - } - return true; - case R.id.browse_feeds: - if (cf != null) { - FeedCategory cat = cf.getCategoryAtPosition(info.position); - if (cat != null) { - viewCategory(cat, false); - cf.setSelectedCategory(cat); - } - } - return true; - case R.id.catchup_category: - if (cf != null) { - FeedCategory cat = cf.getCategoryAtPosition(info.position); - if (cat != null) { - catchupFeed(new Feed(cat.id, cat.title, true)); - } - } - return true; - case R.id.catchup_feed: - if (ff != null) { - Feed feed = ff.getFeedAtPosition(info.position); - if (feed != null) { - catchupFeed(feed); - } - } - return true; - case R.id.selection_toggle_marked: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.marked = !a.marked; - - toggleArticlesMarked(selected); - updateHeadlines(); - } else { - Article article = hf.getArticleAtPosition(info.position); - if (article != null) { - article.marked = !article.marked; - saveArticleMarked(article); - updateHeadlines(); - } - } - } - return true; - case R.id.selection_toggle_published: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.published = !a.published; - - toggleArticlesPublished(selected); - updateHeadlines(); - } else { - Article article = hf.getArticleAtPosition(info.position); - if (article != null) { - article.published = !article.published; - saveArticlePublished(article); - updateHeadlines(); - } - } - } - return true; - case R.id.selection_toggle_unread: - if (hf != null) { - ArticleList selected = hf.getSelectedArticles(); - - if (selected.size() > 0) { - for (Article a : selected) - a.unread = !a.unread; - - toggleArticlesUnread(selected); - updateHeadlines(); - } else { - Article article = hf.getArticleAtPosition(info.position); - if (article != null) { - article.unread = !article.unread; - saveArticleUnread(article); - updateHeadlines(); - } - } - } - return true; - case R.id.share_article: - if (hf != null) { - Article article = hf.getArticleAtPosition(info.position); - if (article != null) - shareArticle(article); - } - return true; - case R.id.catchup_above: - if (hf != null) { - Article article = hf.getArticleAtPosition(info.position); - if (article != null) { - ArticleList articles = hf.getAllArticles(); - ArticleList tmp = new ArticleList(); - for (Article a : articles) { - a.unread = false; - tmp.add(a); - if (article.id == a.id) - break; - } - if (tmp.size() > 0) { - toggleArticlesUnread(tmp); - updateHeadlines(); - } - } - } - return true; - /* - * case R.id.set_unread: if (hf != null) { Article article = - * hf.getArticleAtPosition(info.position); if (article != null) { - * article.unread = true; saveArticleUnread(article); } } break; - */ - default: - Log.d(TAG, - "onContextItemSelected, unhandled id=" + item.getItemId()); - return super.onContextItemSelected(item); - } - } - - private Article getRelativeArticle(Article article, RelativeArticle ra) { - HeadlinesFragment frag = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - if (frag != null) { - ArticleList articles = frag.getAllArticles(); - for (int i = 0; i < articles.size(); i++) { - Article a = articles.get(i); - - if (a.id == article.id) { - if (ra == RelativeArticle.AFTER) { - try { - return articles.get(i + 1); - } catch (IndexOutOfBoundsException e) { - return null; - } - } else { - try { - return articles.get(i - 1); - } catch (IndexOutOfBoundsException e) { - return null; - } - } - } - } - } - return null; - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - int action = event.getAction(); - int keyCode = event.getKeyCode(); - switch (keyCode) { - case KeyEvent.KEYCODE_VOLUME_DOWN: - if (action == KeyEvent.ACTION_DOWN) { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (hf != null && m_activeFeed != null) { - Article base = hf.getActiveArticle(); - - Article next = base != null ? getRelativeArticle(base, - RelativeArticle.AFTER) : hf.getArticleAtPosition(0); - - if (next != null) { - hf.setActiveArticle(next); - - boolean combinedMode = m_prefs.getBoolean( - "combined_mode", false); - - if (combinedMode || m_selectedArticle == null) { - next.unread = false; - saveArticleUnread(next); - } else { - openArticle(next); - } - } - } - } - return true; - case KeyEvent.KEYCODE_VOLUME_UP: - if (action == KeyEvent.ACTION_UP) { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (hf != null && m_activeFeed != null) { - Article base = hf.getActiveArticle(); - - Article prev = base != null ? getRelativeArticle(base, - RelativeArticle.BEFORE) : hf - .getArticleAtPosition(0); - - if (prev != null) { - hf.setActiveArticle(prev); - - boolean combinedMode = m_prefs.getBoolean( - "combined_mode", false); - - if (combinedMode || m_selectedArticle == null) { - prev.unread = false; - saveArticleUnread(prev); - } else { - openArticle(prev); - } - } - } - - } - return true; - default: - return super.dispatchKeyEvent(event); - } - } - - @Override - public void onCatSelected(FeedCategory cat) { - Log.d(TAG, "onCatSelected"); - boolean browse = m_prefs.getBoolean("browse_cats_like_feeds", false); - - viewCategory(cat, browse && cat.id >= 0); - } - - @Override - public void setSelectedArticle(Article article) { - m_selectedArticle = article; - updateHeadlines(); - initMainMenu(); - } - - public void restart() { - Intent refresh = new Intent(MainActivity.this, MainActivity.class); - refresh.putExtra("sessionId", m_sessionId); - startActivity(refresh); - finish(); - } - - @Override - public void onArticleListSelectionChange(ArticleList selection) { - initMainMenu(); - } -}
\ No newline at end of file |