show top changed message in articlepager

This commit is contained in:
Andrew Dolgov 2015-07-12 13:18:59 +03:00
parent 32c0691d5d
commit 4083904781
8 changed files with 98 additions and 14 deletions

View File

@ -183,6 +183,17 @@ public class ArticleFragment extends Fragment {
m_contentView = view.findViewById(R.id.article_scrollview);
m_customViewContainer = (FrameLayout) view.findViewById(R.id.article_fullscreen_video);
if (m_article.id == HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED) {
TextView statusMessage = (TextView) view.findViewById(R.id.article_status_message);
statusMessage.setText(R.string.headlines_row_top_changed);
statusMessage.setVisibility(View.VISIBLE);
view.findViewById(R.id.article_scrollview).setVisibility(View.GONE);
view.findViewById(R.id.article_fab).setVisibility(View.GONE);
return view;
}
NotifyingScrollView scrollView = (NotifyingScrollView) view.findViewById(R.id.article_scrollview);
m_fab = view.findViewById(R.id.article_fab);
@ -422,7 +433,7 @@ public class ArticleFragment extends Fragment {
}
protected void renderContent(Bundle savedInstanceState) {
if (!isAdded()) return;
if (!isAdded() || m_web == null) return;
Log.d(TAG, "renderContent: " + m_article.title);
@ -545,14 +556,14 @@ public class ArticleFragment extends Fragment {
public void onPause() {
super.onPause();
m_web.onPause();
if (m_web != null) m_web.onPause();
}
@Override
public void onResume() {
super.onResume();
m_web.onResume();
if (m_web != null) m_web.onResume();
}
public boolean inCustomView() {

View File

@ -155,6 +155,11 @@ public class ArticlePager extends Fragment {
super.onPostExecute(result);
if (result != null) {
if (m_topIdChanged) {
m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED));
}
try {
m_adapter.notifyDataSetChanged();
} catch (BadParcelableException e) {
@ -172,7 +177,7 @@ public class ArticlePager extends Fragment {
}
}
}
} else {
if (m_lastError == ApiError.LOGIN_FAILED) {
m_activity.login(true);
@ -254,6 +259,11 @@ public class ArticlePager extends Fragment {
}
if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId));
if (m_activity.getApiLevel() >= 12) {
put("include_header", "true");
}
}
};

View File

@ -93,6 +93,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public static final int ARTICLE_SPECIAL_LOADMORE = -1;
public static final int ARTICLE_SPECIAL_SPACER = -2;
public static final int ARTICLE_SPECIAL_TOP_CHANGED = -3;
private final String TAG = this.getClass().getSimpleName();
@ -390,7 +391,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
View layout = inflater.inflate(R.layout.headlines_footer, container, false);
layout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight));
layout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight));
m_list.addFooterView(layout, null, false);
}
@ -539,11 +540,15 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
if (result != null) {
m_refreshInProgress = false;
m_articles.add(0, new Article(-2));
m_articles.add(0, new Article(ARTICLE_SPECIAL_SPACER));
if (m_articles.indexOf(m_activeArticle) == -1)
m_activeArticle = null;
if (m_topIdChanged) {
m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED));
}
m_adapter.notifyDataSetChanged();
m_listener.onHeadlinesLoaded(fappend);
@ -551,7 +556,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
// top headline content becomes partially obscured by the toolbar on phones
// (not reproducible on avd)
if (!fappend) m_list.smoothScrollToPosition(0);
} else {
if (m_lastError == ApiError.LOGIN_FAILED) {
m_activity.login(true);
@ -643,6 +648,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
}
if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId));
if (m_activity.getApiLevel() >= 12) {
put("include_header", "true");
}
}
};
@ -695,8 +704,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public static final int VIEW_SELECTED_UNREAD = 3;
public static final int VIEW_LOADMORE = 4;
public static final int VIEW_SPACER = 5;
public static final int VIEW_TOP_CHANGED = 6;
public static final int VIEW_COUNT = VIEW_SPACER+1;
public static final int VIEW_COUNT = VIEW_TOP_CHANGED+1;
private final Integer[] origTitleColors = new Integer[VIEW_COUNT];
private final int titleHighScoreUnreadColor;
@ -754,6 +764,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
if (a.id == ARTICLE_SPECIAL_LOADMORE) {
return VIEW_LOADMORE;
} else if (a.id == ARTICLE_SPECIAL_TOP_CHANGED) {
return VIEW_TOP_CHANGED;
} else if (a.id == ARTICLE_SPECIAL_SPACER) {
return VIEW_SPACER;
} else if (m_activeArticle != null && a.id == m_activeArticle.id && a.unread) {
@ -858,6 +870,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
case VIEW_SPACER:
layoutId = R.layout.fragment_dummy;
break;
case VIEW_TOP_CHANGED:
layoutId = R.layout.headlines_row_top_changed;
break;
case VIEW_UNREAD:
layoutId = m_compactLayoutMode ? R.layout.headlines_row_unread_compact : R.layout.headlines_row_unread;
break;
@ -1705,7 +1720,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public void setArticles(ArticleList articles) {
m_articles.clear();
m_articles.add(0, new Article(-2));
m_articles.add(0, new Article(ARTICLE_SPECIAL_SPACER));
m_articles.addAll(articles);
m_adapter.notifyDataSetChanged();
}

View File

@ -1246,7 +1246,7 @@ public class OnlineActivity extends CommonActivity {
return true;
}
protected int getApiLevel() {
public int getApiLevel() {
return Application.getInstance().m_apiLevel;
}

View File

@ -1,10 +1,12 @@
package org.fox.ttrss.util;
import android.content.Context;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import org.fox.ttrss.ApiRequest;
@ -13,6 +15,7 @@ import org.fox.ttrss.OnlineActivity;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.List;
@ -27,7 +30,9 @@ public class HeadlinesRequest extends ApiRequest {
private OnlineActivity m_activity;
private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles;
private Feed m_feed;
protected boolean m_topIdChanged = false;
public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) {
super(context);
@ -48,9 +53,25 @@ public class HeadlinesRequest extends ApiRequest {
JsonArray content = result.getAsJsonArray();
if (content != null) {
Type listType = new TypeToken<List<Article>>() {}.getType();
final List<Article> articles = new Gson().fromJson(content, listType);
final List<Article> articles;
final JsonObject header;
if (m_activity.getApiLevel() >= 12) {
header = content.get(0).getAsJsonObject();
//Log.d(TAG, "headerID:" + header.get("top_id_changed"));
m_topIdChanged = header.get("top_id_changed") != null;
Type listType = new TypeToken<List<Article>>() {}.getType();
articles = new Gson().fromJson(content.get(1), listType);
} else {
header = null;
Type listType = new TypeToken<List<Article>>() {}.getType();
articles = new Gson().fromJson(content, listType);
}
if (m_offset == 0) {
m_articles.clear();
} else {

View File

@ -154,4 +154,12 @@
android:src="@drawable/ic_action_web_site"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="[status message]"
android:id="@+id/article_status_message"
android:gravity="center"
android:visibility="gone" />
</FrameLayout>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/headlines_row_top_changed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="16dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/top_changed_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?headlineExcerptTextColor"
android:text="@string/headlines_row_top_changed" />
</LinearLayout>

View File

@ -232,4 +232,5 @@
<string name="video_player_open">Open video</string>
<string name="flavor_image_prompt">(more images...)</string>
<string name="headlines_row_top_changed">New articles found, reload feed to continue.</string>
</resources>