package de.tum.in.tumcampusapp.activities; import android.database.Cursor; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; import de.tum.in.tumcampusapp.R; import de.tum.in.tumcampusapp.activities.generic.ActivityForDownloadingExternal; import de.tum.in.tumcampusapp.adapters.NewsAdapter; import de.tum.in.tumcampusapp.auxiliary.Const; import de.tum.in.tumcampusapp.auxiliary.NetUtils; import de.tum.in.tumcampusapp.auxiliary.Utils; import de.tum.in.tumcampusapp.managers.NewsManager; /** * Activity to show News (message, image, date) */ public class NewsActivity extends ActivityForDownloadingExternal { private RecyclerView lv; private int state = -1; private NewsManager nm; public NewsActivity() { super(Const.NEWS, R.layout.activity_news); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestDownload(false); } @Override protected void onStart() { super.onStart(); // Gets all news from database nm = new NewsManager(this); Cursor cursor = nm.getAllFromDb(this); if (cursor.getCount() > 0) { NewsAdapter adapter = new NewsAdapter(this, cursor); lv = (RecyclerView) findViewById(R.id.activity_news_list_view); lv.setLayoutManager(new LinearLayoutManager(this)); lv.setAdapter(adapter); /** Restore previous state (including selected item index and scroll position) */ if (state == -1) { lv.scrollToPosition(nm.getTodayIndex()); } else { lv.scrollToPosition(state); } } else if (NetUtils.isConnected(this)) { showErrorLayout(); } else { showNoInternetLayout(); } } /** * Save ListView state */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); LinearLayoutManager layoutManager = (LinearLayoutManager) lv.getLayoutManager(); state = layoutManager.findFirstVisibleItemPosition(); } @Override public boolean onCreateOptionsMenu(Menu menu) { Cursor cur = nm.getNewsSources(); int i = 0; if (cur.moveToFirst()) { do { MenuItem item = menu.add(Menu.NONE, i, Menu.NONE, cur.getString(2)); item.setCheckable(true); boolean checked = Utils.getSettingBool(this, "news_source_" + cur.getString(0), true); item.setChecked(checked); i++; } while (cur.moveToNext()); } cur.close(); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Cursor cur = nm.getNewsSources(); if (item.getItemId() < cur.getCount() && cur.moveToPosition(item.getItemId())) { boolean checked = !item.isChecked(); Utils.setSetting(this, "news_source_" + cur.getString(0), checked); item.setChecked(checked); if(lv != null) { //We really don't care if the lv is null, if the position can't be saved. Rather not have the app crash here LinearLayoutManager layoutManager = (LinearLayoutManager) lv.getLayoutManager(); state = layoutManager.findFirstVisibleItemPosition(); } requestDownload(false); return true; } return super.onOptionsItemSelected(item); } }