From 44e6fcfc7a1887f3f5e0c9978139aaa670ea417d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 11 May 2025 09:20:42 +0300 Subject: drop offline mode --- org.fox.ttrss/src/main/AndroidManifest.xml | 23 - .../java/org/fox/ttrss/BaseFeedlistFragment.java | 159 +-- .../main/java/org/fox/ttrss/OnlineActivity.java | 168 +-- .../org/fox/ttrss/offline/OfflineActivity.java | 845 ------------- .../fox/ttrss/offline/OfflineArticleFragment.java | 505 -------- .../org/fox/ttrss/offline/OfflineArticlePager.java | 288 ----- .../fox/ttrss/offline/OfflineDetailActivity.java | 267 ---- .../fox/ttrss/offline/OfflineDownloadService.java | 594 --------- .../offline/OfflineFeedCategoriesFragment.java | 358 ------ .../fox/ttrss/offline/OfflineFeedsFragment.java | 367 ------ .../offline/OfflineHeadlinesEventListener.java | 7 - .../ttrss/offline/OfflineHeadlinesFragment.java | 1311 -------------------- .../fox/ttrss/offline/OfflineMasterActivity.java | 376 ------ .../fox/ttrss/offline/OfflineUploadService.java | 282 ----- .../java/org/fox/ttrss/util/ImageCacheService.java | 323 ----- org.fox.ttrss/src/main/res/xml/preferences.xml | 20 - 16 files changed, 60 insertions(+), 5833 deletions(-) delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticlePager.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDetailActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineDownloadService.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedCategoriesFragment.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineFeedsFragment.java delete mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesEventListener.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineMasterActivity.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineUploadService.java delete mode 100755 org.fox.ttrss/src/main/java/org/fox/ttrss/util/ImageCacheService.java (limited to 'org.fox.ttrss') diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml index b79e3b05..0f66928f 100755 --- a/org.fox.ttrss/src/main/AndroidManifest.xml +++ b/org.fox.ttrss/src/main/AndroidManifest.xml @@ -80,19 +80,6 @@ android:name=".LogcatActivity" android:label="@string/logcat_title" > - - - - - - - - - - diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java index 0952e7f7..252b1343 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/BaseFeedlistFragment.java @@ -13,8 +13,6 @@ import android.widget.TextView; import androidx.appcompat.widget.SwitchCompat; -import org.fox.ttrss.offline.OfflineActivity; - import java.net.MalformedURLException; import java.net.URL; @@ -23,115 +21,76 @@ public abstract class BaseFeedlistFragment extends androidx.fragment.app.Fragmen public void initDrawerHeader(LayoutInflater inflater, View view, ListView list, final CommonActivity activity, final SharedPreferences prefs, boolean isRoot) { - boolean isOffline = activity instanceof OfflineActivity; - - try { - View layout = inflater.inflate(R.layout.drawer_header, list, false); - list.addHeaderView(layout, null, false); + View layout = inflater.inflate(R.layout.drawer_header, list, false); + list.addHeaderView(layout, null, false); - TextView login = view.findViewById(R.id.drawer_header_login); - TextView server = view.findViewById(R.id.drawer_header_server); + TextView login = view.findViewById(R.id.drawer_header_login); + TextView server = view.findViewById(R.id.drawer_header_server); - login.setText(prefs.getString("login", "")); - try { - server.setText(new URL(prefs.getString("ttrss_url", "")).getHost()); - } catch (MalformedURLException e) { - server.setText(""); - } + login.setText(prefs.getString("login", "")); + try { + server.setText(new URL(prefs.getString("ttrss_url", "")).getHost()); + } catch (MalformedURLException e) { + server.setText(""); + } - View settings = view.findViewById(R.id.drawer_settings_btn); + View settings = view.findViewById(R.id.drawer_settings_btn); - settings.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - Intent intent = new Intent(getActivity(), - PreferencesActivity.class); + settings.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + Intent intent = new Intent(getActivity(), + PreferencesActivity.class); - startActivityForResult(intent, 0); + startActivityForResult(intent, 0); - } catch (Exception e) { - e.printStackTrace(); - } + } catch (Exception e) { + e.printStackTrace(); } - }); - - /* deal with ~material~ footers */ + } + }); - // divider - final View footer = inflater.inflate(R.layout.drawer_divider, list, false); - footer.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // - } - }); - list.addFooterView(footer); - - // unread only checkbox - final View rowToggle = inflater.inflate(R.layout.feeds_row_toggle, list, false); - list.addFooterView(rowToggle); - TextView text = rowToggle.findViewById(R.id.title); - text.setText(R.string.unread_only); - - ImageView icon = rowToggle.findViewById(R.id.icon); - TypedValue tv = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.ic_filter_variant, tv, true); - icon.setImageResource(tv.resourceId); - - final SwitchCompat rowSwitch = rowToggle.findViewById(R.id.row_switch); - rowSwitch.setChecked(activity.getUnreadOnly()); - - rowSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton button, boolean isChecked) { - activity.setUnreadOnly(isChecked); - refresh(); - } - }); + /* deal with ~material~ footers */ - footer.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - rowSwitch.setChecked(!rowSwitch.isChecked()); - } - }); - - // root or subdirectory (i.e. feed category) - if (isRoot) { - // offline - final View offlineFooter = inflater.inflate(R.layout.feeds_row, list, false); - offlineFooter.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (activity instanceof OnlineActivity) { - ((OnlineActivity)activity).switchOffline(); - - } else if (activity instanceof OfflineActivity) { - ((OfflineActivity)activity).switchOnline(); - } - } - }); - - list.addFooterView(offlineFooter); - text = offlineFooter.findViewById(R.id.title); - text.setText(isOffline ? R.string.go_online : R.string.go_offline); - - icon = offlineFooter.findViewById(R.id.icon); - tv = new TypedValue(); - getActivity().getTheme().resolveAttribute(isOffline ? R.attr.ic_cloud_upload : R.attr.ic_cloud_download, tv, true); - icon.setImageResource(tv.resourceId); - - TextView counter = offlineFooter.findViewById(R.id.unread_counter); - counter.setText(R.string.blank); + // divider + final View footer = inflater.inflate(R.layout.drawer_divider, list, false); + footer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // } + }); + list.addFooterView(footer); + + // unread only checkbox + final View rowToggle = inflater.inflate(R.layout.feeds_row_toggle, list, false); + list.addFooterView(rowToggle); + TextView text = rowToggle.findViewById(R.id.title); + text.setText(R.string.unread_only); + + ImageView icon = rowToggle.findViewById(R.id.icon); + TypedValue tv = new TypedValue(); + getActivity().getTheme().resolveAttribute(R.attr.ic_filter_variant, tv, true); + icon.setImageResource(tv.resourceId); + + final SwitchCompat rowSwitch = rowToggle.findViewById(R.id.row_switch); + rowSwitch.setChecked(activity.getUnreadOnly()); + + rowSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton button, boolean isChecked) { + activity.setUnreadOnly(isChecked); + refresh(); + } + }); - } catch (InflateException e) { - // welp couldn't inflate header i guess - e.printStackTrace(); - } catch (java.lang.UnsupportedOperationException e) { - e.printStackTrace(); - } + footer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + rowSwitch.setChecked(!rowSwitch.isChecked()); + } + }); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index ae4622ef..703d131b 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -1,15 +1,12 @@ package org.fox.ttrss; import android.annotation.SuppressLint; -import android.annotation.TargetApi; 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.graphics.Point; import android.net.ConnectivityManager; @@ -37,15 +34,11 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; -import org.fox.ttrss.offline.OfflineActivity; -import org.fox.ttrss.offline.OfflineDownloadService; -import org.fox.ttrss.offline.OfflineUploadService; import org.fox.ttrss.share.SubscribeActivity; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; import org.fox.ttrss.types.Feed; import org.fox.ttrss.types.Label; -import org.fox.ttrss.util.ImageCacheService; import java.lang.reflect.Type; import java.util.Arrays; @@ -165,17 +158,6 @@ public class OnlineActivity extends CommonActivity { public abstract void OnLoginFailed(); } - private BroadcastReceiver m_broadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context content, Intent intent) { - if (intent.getAction().equals(OfflineUploadService.INTENT_ACTION_SUCCESS)) { - toast(R.string.offline_sync_success); - } - } - }; - - - @TargetApi(11) private class HeadlinesActionModeCallback implements ActionMode.Callback { @Override @@ -234,9 +216,6 @@ public class OnlineActivity extends CommonActivity { super.onCreate(savedInstanceState); SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - boolean isOffline = localPrefs.getBoolean("offline_mode_active", false); - - Log.d(TAG, "m_isOffline=" + isOffline); setContentView(R.layout.activity_login); @@ -244,115 +223,9 @@ public class OnlineActivity extends CommonActivity { setSupportActionBar(toolbar); m_cmgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - - Intent intent = getIntent(); - - Log.d(TAG, "intent action=" + intent.getAction()); - - if (OfflineDownloadService.INTENT_ACTION_CANCEL.equals(intent.getAction())) { - - Intent serviceIntent = new Intent( - OnlineActivity.this, - OfflineDownloadService.class); - - stopService(serviceIntent); - - serviceIntent = new Intent(); - serviceIntent.setAction(ImageCacheService.INTENT_ACTION_ICS_STOP); - serviceIntent.addCategory(Intent.CATEGORY_DEFAULT); - sendBroadcast(serviceIntent); - - } else if (OfflineDownloadService.INTENT_ACTION_SWITCH_OFFLINE.equals(intent.getAction())) { - isOffline = true; - } - - if (isOffline) { - switchOfflineSuccess(); - } else { - m_headlinesActionModeCallback = new HeadlinesActionModeCallback(); - } + m_headlinesActionModeCallback = new HeadlinesActionModeCallback(); } - protected void switchOffline() { - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(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 (getSessionId() != null) { - Log.d(TAG, "offline: starting"); - - Intent intent = new Intent( - OnlineActivity.this, - OfflineDownloadService.class); - intent.putExtra("sessionId", getSessionId()); - - startService(intent); - } - } - }) - .setNegativeButton(R.string.dialog_cancel, - new Dialog.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - // - } - }); - - Dialog dlg = builder.create(); - dlg.show(); - } - - - @Override - public void onPause() { - super.onPause(); - - try { - unregisterReceiver(m_broadcastReceiver); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - } - - private void syncOfflineData() { - Log.d(TAG, "offlineSync: starting"); - - Intent intent = new Intent( - OnlineActivity.this, - OfflineUploadService.class); - - intent.putExtra("sessionId", getSessionId()); - - startService(intent); - } - - private void switchOfflineSuccess() { - logout(); - // setLoadingStatus(R.string.blank, false); - - SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = localPrefs.edit(); - editor.putBoolean("offline_mode_active", true); - editor.apply(); - - Intent offline = new Intent(OnlineActivity.this, OfflineActivity.class); - offline.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_CLEAR_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - offline.putExtra("initial", true); - - startActivity(offline); - - finish(); - } - public void login() { login(false, null); } @@ -415,9 +288,6 @@ public class OnlineActivity extends CommonActivity { startActivityForResult(intent, 0); overridePendingTransition(0, 0); - if (getDatabaseHelper().hasPendingOfflineData()) - syncOfflineData(); - finish(); } @@ -541,15 +411,9 @@ public class OnlineActivity extends CommonActivity { displayAttachments(article); } return true; - /*case R.id.logout: - logout(); - return true;*/ } else if (itemId == R.id.login) { login(); return true; - /*case R.id.go_offline: - switchOffline(); - return true;*/ } else if (itemId == R.id.article_edit_note) { if (ap != null && ap.getSelectedArticle() != null) { editArticleNote(ap.getSelectedArticle()); @@ -1055,42 +919,12 @@ public class OnlineActivity extends CommonActivity { protected void loginFailure() { setSessionId(null); initMenu(); - - if (getDatabaseHelper().hasOfflineData()) { - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(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) { - // - } - }); - - Dialog dlg = builder.create(); - dlg.show(); - } } @Override public void onResume() { super.onResume(); - 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); - if (getSessionId() == null) { login(); } else { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java deleted file mode 100755 index 18395778..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java +++ /dev/null @@ -1,845 +0,0 @@ -package org.fox.ttrss.offline; - -import android.annotation.SuppressLint; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.content.Intent; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.database.sqlite.SQLiteStatement; -import android.net.Uri; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.provider.BaseColumns; -import android.util.Log; -import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.widget.EditText; - -import androidx.appcompat.view.ActionMode; -import androidx.appcompat.widget.Toolbar; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import org.fox.ttrss.CommonActivity; -import org.fox.ttrss.OnlineActivity; -import org.fox.ttrss.PreferencesActivity; -import org.fox.ttrss.R; - -public class OfflineActivity extends CommonActivity { - private final String TAG = this.getClass().getSimpleName(); - - protected SharedPreferences m_prefs; - protected Menu m_menu; - - private ActionMode m_headlinesActionMode; - private HeadlinesActionModeCallback m_headlinesActionModeCallback; - - private String m_lastImageHitTestUrl; - - public String getFeedTitle(int feedId, boolean isCat) { - try { - SQLiteStatement stmt; - - if (isCat) { - stmt = getDatabase().compileStatement( - "SELECT title FROM categories " + "WHERE " + BaseColumns._ID + " = ?"); - } else { - stmt = getDatabase().compileStatement( - "SELECT title FROM feeds " + "WHERE " + BaseColumns._ID + " = ?"); - } - - stmt.bindLong(1, feedId); - String title = stmt.simpleQueryForString(); - - stmt.close(); - - return title; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - @SuppressLint("NewApi") - private class HeadlinesActionModeCallback implements ActionMode.Callback { - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - m_headlinesActionMode = null; - deselectAllArticles(); - } - - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.action_mode_headlines, menu); - - return true; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - onOptionsItemSelected(item); - return false; - } - } - - @Override - public boolean onContextItemSelected(android.view.MenuItem item) { - /* AdapterContextMenuInfo info = (AdapterContextMenuInfo) item - .getMenuInfo(); */ - - final OfflineArticlePager ap = (OfflineArticlePager)getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - int itemId = item.getItemId(); - if (itemId == R.id.article_img_open) { - if (getLastContentImageHitTestUrl() != null) { - try { - openUri(Uri.parse(getLastContentImageHitTestUrl())); - } catch (Exception e) { - e.printStackTrace(); - toast(R.string.error_other_error); - } - } - return true; - } else if (itemId == R.id.article_img_copy) { - if (getLastContentImageHitTestUrl() != null) { - copyToClipboard(getLastContentImageHitTestUrl()); - } - return true; - } else if (itemId == R.id.article_img_share) { - if (getLastContentImageHitTestUrl() != null) { - shareImageFromUri(getLastContentImageHitTestUrl()); - } - return true; - } else if (itemId == R.id.article_img_share_url) { - if (getLastContentImageHitTestUrl() != null) { - shareText(getLastContentImageHitTestUrl()); - } - return true; - } else if (itemId == R.id.article_img_view_caption) { - if (getLastContentImageHitTestUrl() != null) { - - String content = ""; - - Cursor article = getArticleById(ap.getSelectedArticleId()); - - if (article != null) { - content = article.getString(article.getColumnIndex("content")); - article.close(); - } - - displayImageCaption(getLastContentImageHitTestUrl(), content); - } - return true; - } - Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId()); - return super.onContextItemSelected(item); - - } - - @Override - public void onCreate(Bundle savedInstanceState) { - m_prefs = PreferenceManager - .getDefaultSharedPreferences(getApplicationContext()); - - setAppTheme(m_prefs); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_login); - - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - invalidateOptionsMenu(); - - Intent intent = getIntent(); - - if (intent.getExtras() != null) { - if (intent.getBooleanExtra("initial", false)) { - intent = new Intent(OfflineActivity.this, OfflineMasterActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - - startActivityForResult(intent, 0); - finish(); - } - } - - /* if (savedInstanceState != null) { - - } */ - - m_headlinesActionModeCallback = new HeadlinesActionModeCallback(); - } - - @Override - public void onSaveInstanceState(Bundle out) { - super.onSaveInstanceState(out); - } - - protected void selectArticles(int feedId, boolean isCat, int mode) { - switch (mode) { - case 0: - SQLiteStatement stmtSelectAll = null; - - if (isCat) { - stmtSelectAll = getDatabase().compileStatement( - "UPDATE articles SET selected = 1 WHERE feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)"); - } else { - stmtSelectAll = getDatabase().compileStatement( - "UPDATE articles SET selected = 1 WHERE feed_id = ?"); - } - - stmtSelectAll.bindLong(1, feedId); - stmtSelectAll.execute(); - stmtSelectAll.close(); - - break; - case 1: - - SQLiteStatement stmtSelectUnread = null; - - if (isCat) { - stmtSelectUnread = getDatabase().compileStatement( - "UPDATE articles SET selected = 1 WHERE feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?) AND unread = 1"); - } else { - stmtSelectUnread = getDatabase().compileStatement( - "UPDATE articles SET selected = 1 WHERE feed_id = ? AND unread = 1"); - } - - stmtSelectUnread.bindLong(1, feedId); - stmtSelectUnread.execute(); - stmtSelectUnread.close(); - - break; - case 2: - deselectAllArticles(); - break; - } - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final OfflineHeadlinesFragment ohf = (OfflineHeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - /* final OfflineFeedsFragment off = (OfflineFeedsFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_FEEDS); */ - - /* final OfflineFeedCategoriesFragment ocf = (OfflineFeedCategoriesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_CATS); */ - - final OfflineArticlePager oap = (OfflineArticlePager) getSupportFragmentManager() - .findFragmentByTag(FRAG_ARTICLE); - - int itemId = item.getItemId();/* case android.R.id.home: - finish(); - return true; *//* case R.id.headlines_toggle_sidebar: - if (true && !isSmallScreen()) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putBoolean("headlines_hide_sidebar", !m_prefs.getBoolean("headlines_hide_sidebar", false)); - editor.commit(); - - if (ohf != null && ohf.isAdded()) { - ohf.getView().setVisibility(m_prefs.getBoolean("headlines_hide_sidebar", false) ? View.GONE : View.VISIBLE); - } - } - return true; *//*case R.id.go_online: - switchOnline(); - return true;*/ - if (itemId == R.id.search) { - if (ohf != null) { - Dialog dialog = new Dialog(this); - - final EditText edit = new EditText(this); - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(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(); - - ohf.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; - } else if (itemId == R.id.preferences) { - Intent intent = new Intent(this, PreferencesActivity.class); - startActivityForResult(intent, 0); - return true; - } else if (itemId == R.id.headlines_view_mode) { - if (ohf != null) { - Dialog dialog = new Dialog(this); - - String viewMode = getViewMode(); - - //Log.d(TAG, "viewMode:" + getViewMode()); - - int selectedIndex = 0; - - if (viewMode.equals("all_articles")) { - selectedIndex = 0; - } else if (viewMode.equals("marked")) { - selectedIndex = 1; - } else if (viewMode.equals("published")) { - selectedIndex = 2; - } else if (viewMode.equals("unread")) { - selectedIndex = 3; - } - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) - .setTitle(R.string.headlines_set_view_mode) - .setSingleChoiceItems( - new String[]{ - /* getString(R.string.headlines_adaptive), */ - getString(R.string.headlines_all_articles), - getString(R.string.headlines_starred), - getString(R.string.headlines_published), - getString(R.string.headlines_unread)}, - selectedIndex, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - switch (which) { - /* case 0: - setViewMode("adaptive"); - break; */ - case 0: - setViewMode("all_articles"); - break; - case 1: - setViewMode("marked"); - break; - case 2: - setViewMode("published"); - break; - case 3: - setViewMode("unread"); - break; - } - dialog.cancel(); - - refresh(); - } - }); - - dialog = builder.create(); - dialog.show(); - - } - return true; - } else if (itemId == R.id.headlines_select) { - if (ohf != null) { - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(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 OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - - selectArticles(ohf.getFeedId(), ohf.getFeedIsCat(), which); - invalidateOptionsMenu(); - refresh(); - - dialog.cancel(); - } - }); - - Dialog dialog = builder.create(); - dialog.show(); - } - return true; - } else if (itemId == R.id.headlines_mark_as_read) { - if (ohf != null) { - final int feedId = ohf.getFeedId(); - final boolean isCat = ohf.getFeedIsCat(); - - int count = getUnreadArticleCount(feedId, isCat); - - if (count > 0) { - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) - .setMessage(getResources().getQuantityString(R.plurals.mark_num_headlines_as_read, count, count)) - .setPositiveButton(R.string.catchup, - new OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - catchupFeed(feedId, isCat); - - } - }) - .setNegativeButton(R.string.dialog_cancel, - new OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - } - }); - - Dialog dlg = builder.create(); - dlg.show(); - } - } - return true; - } else if (itemId == R.id.share_article) { - int articleId = oap.getSelectedArticleId(); - - shareArticle(articleId); - - return true; - } else if (itemId == R.id.toggle_marked) { - if (oap != null) { - int articleId = oap.getSelectedArticleId(); - - SQLiteStatement stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, modified_marked = 1, marked = NOT marked WHERE " - + BaseColumns._ID + " = ?"); - stmt.bindLong(1, articleId); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - } else if (itemId == R.id.toggle_unread) { - if (oap != null) { - int articleId = oap.getSelectedArticleId(); - - SQLiteStatement stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, unread = NOT unread WHERE " - + BaseColumns._ID + " = ?"); - stmt.bindLong(1, articleId); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - /* case R.id.selection_select_none: - deselectAllArticles(); - return true; */ - } else if (itemId == R.id.selection_toggle_unread) { - if (getSelectedArticleCount() > 0) { - SQLiteStatement stmt = getDatabase() - .compileStatement( - "UPDATE articles SET modified = 1, unread = NOT unread WHERE selected = 1"); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - } else if (itemId == R.id.selection_toggle_marked) { - if (getSelectedArticleCount() > 0) { - SQLiteStatement stmt = getDatabase() - .compileStatement( - "UPDATE articles SET modified = 1, modified_marked = 1, marked = NOT marked WHERE selected = 1"); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - } else if (itemId == R.id.selection_toggle_published) { - if (getSelectedArticleCount() > 0) { - SQLiteStatement stmt = getDatabase() - .compileStatement( - "UPDATE articles SET modified = 1, modified_published = 1, published = NOT published WHERE selected = 1"); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - } else if (itemId == R.id.toggle_published) { - if (oap != null) { - int articleId = oap.getSelectedArticleId(); - - SQLiteStatement stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, modified_published = 1, published = NOT published WHERE " - + BaseColumns._ID + " = ?"); - stmt.bindLong(1, articleId); - stmt.execute(); - stmt.close(); - - refresh(); - } - return true; - } else if (itemId == R.id.catchup_above) { - if (oap != null) { - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) - .setMessage(R.string.confirm_catchup_above) - .setPositiveButton(R.string.dialog_ok, - new OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - catchupAbove(oap); - - } - }) - .setNegativeButton(R.string.dialog_cancel, - new OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - - } - }); - - Dialog dlg = builder.create(); - dlg.show(); - } - return true; - } - Log.d(TAG, "onOptionsItemSelected, unhandled id=" + item.getItemId()); - return super.onOptionsItemSelected(item); - } - - private void catchupAbove(OfflineArticlePager oap) { - int articleId = oap.getSelectedArticleId(); - int feedId = oap.getFeedId(); - boolean isCat = oap.getFeedIsCat(); - - SQLiteStatement stmt = null; - - if (isCat) { - stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 WHERE " + - "updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " + - "AND feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)"); - } else { - stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 WHERE " + - "updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " + - "AND feed_id = ?"); - } - - stmt.bindLong(1, articleId); - stmt.bindLong(2, feedId); - stmt.execute(); - stmt.close(); - - refresh(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.activity_offline, menu); - - m_menu = menu; - - initMenu(); - - return true; - } - - @SuppressLint("NewApi") - protected void initMenu() { - if (m_menu != null) { - m_menu.setGroupVisible(R.id.menu_group_headlines, false); - m_menu.setGroupVisible(R.id.menu_group_article, false); - m_menu.setGroupVisible(R.id.menu_group_feeds, false); - - OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - if (hf != null) { - if (hf.getSelectedArticleCount() > 0 && m_headlinesActionMode == null) { - m_headlinesActionMode = startSupportActionMode(m_headlinesActionModeCallback); - } else if (hf.getSelectedArticleCount() == 0 && m_headlinesActionMode != null) { - m_headlinesActionMode.finish(); - } - } - - OfflineArticlePager ap = (OfflineArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - if (ap != null) { - int articleId = ap.getSelectedArticleId(); - - Cursor article = getArticleById(articleId); - - if (article != null) { - boolean unread = article.getInt(article.getColumnIndex("unread")) == 1; - boolean marked = article.getInt(article.getColumnIndex("marked")) == 1; - boolean published = article.getInt(article.getColumnIndex("published")) == 1; - - m_menu.findItem(R.id.toggle_marked).setIcon(marked ? R.drawable.baseline_star_24 : - R.drawable.baseline_star_outline_24); - - m_menu.findItem(R.id.toggle_published).setIcon(published ? R.drawable.baseline_check_box_24 : - R.drawable.baseline_rss_feed_24); - - m_menu.findItem(R.id.toggle_unread).setIcon(unread ? R.drawable.baseline_mark_as_unread_24 : - R.drawable.baseline_email_24); - - article.close(); - } - } - } - } - - public void switchOnline() { - SharedPreferences localPrefs = getSharedPreferences("localprefs", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = localPrefs.edit(); - editor.putBoolean("offline_mode_active", false); - editor.apply(); - - Intent refresh = new Intent(this, OnlineActivity.class); - refresh.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_CLEAR_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - - startActivity(refresh); - - finish(); - } - - protected Cursor getArticleById(int articleId) { - Cursor c = getDatabase().query("articles", null, - BaseColumns._ID + "=?", - new String[]{String.valueOf(articleId)}, null, null, null); - - c.moveToFirst(); - - return c; - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (m_prefs.getBoolean("use_volume_keys", false)) { - OfflineArticlePager ap = (OfflineArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - - if (ap != null && ap.isAdded()) { - switch (keyCode) { - case KeyEvent.KEYCODE_VOLUME_UP: - ap.selectArticle(false); - return true; - case KeyEvent.KEYCODE_VOLUME_DOWN: - ap.selectArticle(true); - return true; - } - } - } - - return super.onKeyDown(keyCode, event); - } - - // Handle onKeyUp too to suppress beep - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (m_prefs.getBoolean("use_volume_keys", false)) { - - switch (keyCode) { - case KeyEvent.KEYCODE_VOLUME_UP: - case KeyEvent.KEYCODE_VOLUME_DOWN: - return true; - } - } - - return super.onKeyUp(keyCode, event); - } - - protected Cursor getFeedById(int feedId) { - Cursor c = getDatabase().query("feeds", null, - BaseColumns._ID + "=?", - new String[]{String.valueOf(feedId)}, null, null, null); - - c.moveToFirst(); - - return c; - } - - protected Cursor getCatById(int catId) { - Cursor c = getDatabase().query("categories", null, - BaseColumns._ID + "=?", - new String[]{String.valueOf(catId)}, null, null, null); - - c.moveToFirst(); - - return c; - } - - protected Intent getShareIntent(Cursor article) { - if (article != null) { - String title = article.getString(article.getColumnIndex("title")); - String link = article.getString(article.getColumnIndex("link")); - - return getShareIntent(link, title); - } else { - return null; - } - } - - protected void shareArticle(int articleId) { - - Cursor article = getArticleById(articleId); - - if (article != null) { - shareArticle(article); - article.close(); - } - } - - private void shareArticle(Cursor article) { - if (article != null) { - Intent intent = getShareIntent(article); - - startActivity(Intent.createChooser(intent, - getString(R.string.share_article))); - } - } - - protected int getSelectedArticleCount() { - Cursor c = getDatabase().query("articles", - new String[]{"COUNT(*)"}, "selected = 1", null, null, null, - null); - c.moveToFirst(); - int selected = c.getInt(0); - c.close(); - - return selected; - } - - protected int getUnreadArticleCount(int feedId, boolean isCat) { - - Cursor c; - - if (isCat) { - c = getDatabase().query("articles", - new String[] { "COUNT(*)" }, "unread = 1 AND feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)", - new String[] { String.valueOf(feedId) }, - null, null, null); - } else { - c = getDatabase().query("articles", - new String[] { "COUNT(*)" }, "unread = 1 AND feed_id = ?", - new String[] { String.valueOf(feedId) }, - null, null, null); - } - - c.moveToFirst(); - int selected = c.getInt(0); - c.close(); - - return selected; - } - - protected void deselectAllArticles() { - getDatabase().execSQL("UPDATE articles SET selected = 0 "); - refresh(); - } - - protected void refresh() { - OfflineFeedsFragment ff = (OfflineFeedsFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_FEEDS); - - if (ff != null) { - ff.refresh(); - } - - OfflineFeedCategoriesFragment cf = (OfflineFeedCategoriesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_CATS); - - if (cf != null) { - cf.refresh(); - } - - OfflineHeadlinesFragment ohf = (OfflineHeadlinesFragment) getSupportFragmentManager() - .findFragmentByTag(FRAG_HEADLINES); - - if (ohf != null) { - ohf.refresh(); - } - - invalidateOptionsMenu(); - } - - public void catchupFeed(int feedId, boolean isCat) { - if (isCat) { - SQLiteStatement stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 WHERE feed_id IN (SELECT " + - BaseColumns._ID + " FROM feeds WHERE cat_id = ?)"); - stmt.bindLong(1, feedId); - stmt.execute(); - stmt.close(); - } else { - SQLiteStatement stmt = getDatabase().compileStatement( - "UPDATE articles SET modified = 1, unread = 0 WHERE feed_id = ?"); - stmt.bindLong(1, feedId); - stmt.execute(); - stmt.close(); - } - - refresh(); - } - - public void setLastContentImageHitTestUrl(String url) { - m_lastImageHitTestUrl = url; - } - - public String getLastContentImageHitTestUrl() { - return m_lastImageHitTestUrl; - } - - public void setViewMode(String viewMode) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putString("offline_view_mode", viewMode); - editor.apply(); - } - - /* public boolean getOldestFirst() { - return getSortMode().equals("oldest_first"); - } - - public String getSortMode() { - return m_prefs.getString("offline_headlines_sort_mode", "default"); - } - - public void setSortMode(String sortMode) { - SharedPreferences.Editor editor = m_prefs.edit(); - editor.putString("offline_headlines_sort_mode", sortMode); - editor.commit(); - } */ - - public String getViewMode() { - return m_prefs.getString("offline_view_mode", "adaptive"); - } - -} diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java deleted file mode 100755 index dfc47131..00000000 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java +++ /dev/null @@ -1,505 +0,0 @@ -package org.fox.ttrss.offline; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.graphics.Color; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.provider.BaseColumns; -import android.util.Log; -import android.util.TypedValue; -import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.webkit.WebChromeClient; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebView.HitTestResult; -import android.webkit.WebViewClient; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; - -import org.fox.ttrss.R; -import org.fox.ttrss.util.ImageCacheService; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.net.MalformedURLException; -import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -import androidx.fragment.app.Fragment; - -import com.google.android.material.button.MaterialButton; - -public class OfflineArticleFragment extends Fragment { - private final String TAG = this.getClass().getSimpleName(); - - private SharedPreferences m_prefs; - private int m_articleId; - private boolean m_isCat = false; // FIXME use - private WebView m_web; - private Cursor m_cursor; - private OfflineDetailActivity m_activity; - - protected View m_customView; - protected FrameLayout m_customViewContainer; - protected View m_contentView; - protected FSVideoChromeClient m_chromeClient; - //protected View m_fab; - - public void initialize(int articleId) { - m_articleId = articleId; - } - - private class FSVideoChromeClient extends WebChromeClient { - //protected View m_videoChildView; - - private CustomViewCallback m_callback; - - public FSVideoChromeClient(View container) { - super(); - - } - - @Override - public void onShowCustomView(View view, CustomViewCallback callback) { - m_activity.getSupportActionBar().hide(); - - // if a view already exists then immediately terminate the new one - if (m_customView != null) { - callback.onCustomViewHidden(); - return; - } - m_customView = view; - m_contentView.setVisibility(View.GONE); - - m_customViewContainer.setVisibility(View.VISIBLE); - m_customViewContainer.addView(view); - - //if (m_fab != null) m_fab.setVisibility(View.GONE); - - m_activity.showSidebar(false); - - m_callback = callback; - } - - @Override - public void onHideCustomView() { - super.onHideCustomView(); - - m_activity.getSupportActionBar().show(); - - if (m_customView == null) - return; - - m_contentView.setVisibility(View.VISIBLE); - m_customViewContainer.setVisibility(View.GONE); - - // Hide the custom view. - m_customView.setVisibility(View.GONE); - - // Remove the custom view from its container. - m_customViewContainer.removeView(m_customView); - m_callback.onCustomViewHidden(); - - /*if (m_fab != null && m_prefs.getBoolean("enable_article_fab", true)) - m_fab.setVisibility(View.VISIBLE);*/ - - m_customView = null; - - m_activity.showSidebar(true); - } - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - /* AdapterContextMenuInfo info = (AdapterContextMenuInfo) item - .getMenuInfo(); */ - - int itemId = item.getItemId(); - if (itemId == R.id.article_link_share) { - m_activity.shareArticle(m_articleId); - return true; - } else if (itemId == R.id.article_link_copy) { - if (true) { - Cursor article = m_activity.getArticleById(m_articleId); - - if (article != null) { - m_activity.copyToClipboard(article.getString(article.getColumnIndex("link"))); - article.close(); - } - } - return true; - } - Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId()); - return super.onContextItemSelected(item); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { - - //getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); - //menu.setHeaderTitle(m_cursor.getString(m_cursor.getColumnIndex("title"))); - - String title = m_cursor.getString(m_cursor.getColumnIndex("title")); - - if (v.getId() == R.id.article_content) { - HitTestResult result = ((WebView)v).getHitTestResult(); - - if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) { - menu.setHeaderTitle(result.getExtra()); - getActivity().getMenuInflater().inflate(R.menu.content_gallery_entry, menu); - - /* FIXME I have no idea how to do this correctly ;( */ - - m_activity.setLastContentImageHitTestUrl(result.getExtra()); - - } else { - menu.setHeaderTitle(title); - getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); - } - } else { - menu.setHeaderTitle(title); - getActivity().getMenuInflater().inflate(R.menu.context_article_link, menu); - } - - super.onCreateContextMenu(menu, v, menuInfo); - - } - - @SuppressLint("NewApi") - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - - if (savedInstanceState != null) { - m_articleId = savedInstanceState.getInt("articleId"); - } - - View view = inflater.inflate(R.layout.fragment_article, container, false); - - m_cursor = m_activity.getDatabase().query("articles LEFT JOIN feeds ON (feed_id = feeds."+BaseColumns._ID+")", - new String[] { "articles.*", "feeds.title AS feed_title" }, "articles." + BaseColumns._ID + "=?", - new String[] { String.valueOf(m_articleId) }, null, null, null); - - m_cursor.moveToFirst(); - - if (m_cursor.isFirst()) { - m_customViewContainer = view.findViewById(R.id.article_fullscreen_video); - - final String link = m_cursor.getString(m_cursor.getColumnIndex("link")); - - int articleFontSize = Integer.parseInt(m_prefs.getString("article_font_size_sp", "16")); - int articleSmallFontSize = Math.max(10, Math.min(18, articleFontSize - 2)); - - TextView title = view.findViewById(R.id.title); - - if (title != null) { - - title.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, articleFontSize + 3)); - - String titleStr; - - if (m_cursor.getString(m_cursor.getColumnIndex("title")).length() > 200) - titleStr = m_cursor.getString(m_cursor.getColumnIndex("title")).substring(0, 200) + "..."; - else - titleStr = m_cursor.getString(m_cursor.getColumnIndex("title")); - - title.setText(titleStr); - //title.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); - title.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - try { - m_activity.openUri(Uri.parse(link)); - } catch (Exception e) { - e.printStackTrace(); - m_activity.toast(R.string.error_other_error); - } - } - }); - - } - - /* MaterialButton score = view.findViewById(R.id.score); - - if (score != null) { - score.setVisibility(View.GONE); - } - - MaterialButton attachments = view.findViewById(R.id.attachments); - - if (attachments != null) { - attachments.setVisibility(View.GONE); - } - - MaterialButton share = view.findViewById(R.id.share); - - if (share != null) { - share.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - m_activity.shareArticle(m_articleId); - } - }); - } */ - - TextView comments = view.findViewById(R.id.comments); - - if (comments != null) { - comments.setVisibility(View.GONE); - } - - TextView note = view.findViewById(R.id.note); - - if (note != null) { - note.setVisibility(View.GONE); - } - - m_web = view.findViewById(R.id.article_content); - - if (m_web != null) { - - m_web.setWebViewClient(new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - try { - m_activity.openUri(Uri.parse(url)); - - return true; - - } catch (Exception e){ - e.printStackTrace(); - } - - return false; - } }); - - m_web.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - HitTestResult result = ((WebView) v).getHitTestResult(); - - if (result != null && (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) { - registerForContextMenu(m_web); - m_activity.openContextMenu(m_web); - unregisterForContextMenu(m_web); - return true; - } else { - return false; - } - } - }); - - String content; - - WebSettings ws = m_web.getSettings(); - ws.setSupportZoom(false); - ws.setJavaScriptEnabled(false); - - m_chromeClient = new FSVideoChromeClient(getView()); - m_web.setWebChromeClient(m_chromeClient); - m_web.setBackgroundColor(Color.TRANSPARENT); - - ws.setMediaPlaybackRequiresUserGesture(true); - - // we need to show "insecure" file:// urls - if (m_prefs.getBoolean("offline_image_cache_enabled", false) && - android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - - ws.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - } - - TypedValue tvTextColor = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.colorOnSurface, tvTextColor, true); - - String textColor = String.format("#%06X", (0xFFFFFF & tvTextColor.data)); - - String cssOverride = "body { color : "+textColor+"; }"; - - TypedValue tvColorPrimary = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.colorPrimary, tvColorPrimary, true); - - String linkHexColor = String.format("#%06X", (0xFFFFFF & tvColorPrimary.data)); - cssOverride += " a:link {color: "+linkHexColor+";} a:visited { color: "+linkHexColor+";}"; - - String articleContent = m_cursor.getString(m_cursor.getColumnIndex("content")); - Document doc = Jsoup.parse(articleContent); - - if (doc != null) { - if (m_prefs.getBoolean("offline_image_cache_enabled", false)) { - - Elements images = doc.select("img,source"); - - for (Element img : images) { - String url = img.attr("src"); - - Log.d(TAG, "src=" + url); - - if (ImageCacheService.isUrlCached(m_activity, url)) { - img.attr("src", "file://" + ImageCacheService.getCacheFileName(m_activity, url)); - } - } - } - - // thanks webview for crashing on