package org.fox.ttrss; import android.annotation.SuppressLint; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.ActionBarActivity; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.widget.Toast; import org.fox.ttrss.util.DatabaseHelper; import java.util.Arrays; public class CommonActivity extends ActionBarActivity implements SharedPreferences.OnSharedPreferenceChangeListener { private final String TAG = this.getClass().getSimpleName(); public final static String FRAG_HEADLINES = "headlines"; public final static String FRAG_ARTICLE = "article"; public final static String FRAG_FEEDS = "feeds"; public final static String FRAG_CATS = "cats"; public final static String THEME_DARK = "THEME_DARK"; public final static String THEME_LIGHT = "THEME_LIGHT"; //public final static String THEME_SEPIA = "THEME_SEPIA"; //public final static String THEME_AMBER = "THEME_AMBER"; public final static String THEME_DEFAULT = CommonActivity.THEME_LIGHT; public static final int EXCERPT_MAX_LENGTH = 256; public static final int EXCERPT_MAX_QUERY_LENGTH = 2048; private DatabaseHelper m_databaseHelper; //private SQLiteDatabase m_readableDb; //private SQLiteDatabase m_writableDb; private boolean m_smallScreenMode = true; private String m_theme; private boolean m_needRestart; protected SharedPreferences m_prefs; protected void setSmallScreen(boolean smallScreen) { Log.d(TAG, "m_smallScreenMode=" + smallScreen); m_smallScreenMode = smallScreen; } public DatabaseHelper getDatabaseHelper() { return m_databaseHelper; } public SQLiteDatabase getDatabase() { return m_databaseHelper.getWritableDatabase(); } public boolean getUnreadOnly() { return m_prefs.getBoolean("show_unread_only", true); } // not the same as isSmallScreen() which is mostly about layout being loaded public boolean isTablet() { return getResources().getConfiguration().smallestScreenWidthDp >= 600; } public void setUnreadOnly(boolean unread) { SharedPreferences.Editor editor = m_prefs.edit(); editor.putBoolean("show_unread_only", unread); editor.apply(); } public void toast(int msgId) { Toast toast = Toast.makeText(CommonActivity.this, msgId, Toast.LENGTH_SHORT); toast.show(); } public void toast(String msg) { Toast toast = Toast.makeText(CommonActivity.this, msg, Toast.LENGTH_SHORT); toast.show(); } @Override public void onResume() { super.onResume(); if (m_needRestart) { Log.d(TAG, "restart requested"); finish(); startActivity(getIntent()); } } @Override public void onDestroy() { super.onDestroy(); } @Override public void onCreate(Bundle savedInstanceState) { m_databaseHelper = DatabaseHelper.getInstance(this); m_prefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()); m_prefs.registerOnSharedPreferenceChangeListener(this); if (savedInstanceState != null) { m_theme = savedInstanceState.getString("theme"); } else { m_theme = m_prefs.getString("theme", CommonActivity.THEME_DEFAULT); } super.onCreate(savedInstanceState); } @Override public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); out.putString("theme", m_theme); } public boolean isSmallScreen() { return m_smallScreenMode; } @SuppressWarnings("deprecation") public boolean isPortrait() { Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); return width < height; } @SuppressLint({ "NewApi", "ServiceCast" }) @SuppressWarnings("deprecation") public void copyToClipboard(String str) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); clipboard.setText(str); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); clipboard.setText(str); } Toast toast = Toast.makeText(this, R.string.text_copied_to_clipboard, Toast.LENGTH_SHORT); toast.show(); } protected void setAppTheme(SharedPreferences prefs) { String theme = prefs.getString("theme", CommonActivity.THEME_DEFAULT); if (theme.equals(THEME_DARK)) { setTheme(R.style.DarkTheme); } else { setTheme(R.style.LightTheme); } } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.d(TAG, "onSharedPreferenceChanged:" + key); String[] filter = new String[] { "theme", "enable_cats", "headline_mode" }; m_needRestart = Arrays.asList(filter).indexOf(key) != -1; } }