diff --git a/clients/android/NewsBlur/app/build.gradle.kts b/clients/android/NewsBlur/app/build.gradle.kts index 03605dc15..4bfd97f59 100644 --- a/clients/android/NewsBlur/app/build.gradle.kts +++ b/clients/android/NewsBlur/app/build.gradle.kts @@ -51,7 +51,6 @@ android { } dependencies { - implementation(Dependencies.coreKtx) implementation(Dependencies.fragment) implementation(Dependencies.recyclerView) implementation(Dependencies.swipeRefreshLayout) diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/ItemsList.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/ItemsList.java index b2cf4ac69..fc4f4bde2 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/ItemsList.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/ItemsList.java @@ -1,8 +1,8 @@ package com.newsblur.activity; -import static com.newsblur.service.NBSyncReceiver.UPDATE_REBUILD; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STATUS; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STORY; +import static com.newsblur.service.NbSyncManager.UPDATE_REBUILD; +import static com.newsblur.service.NbSyncManager.UPDATE_STATUS; +import static com.newsblur.service.NbSyncManager.UPDATE_STORY; import android.content.Intent; import android.os.Bundle; diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/LoginProgress.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/LoginProgress.kt index 512098adc..900817c9a 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/LoginProgress.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/LoginProgress.kt @@ -70,7 +70,7 @@ class LoginProgress : FragmentActivity() { val startMain = Intent(this, Main::class.java) startActivity(startMain) } else { - UIUtils.safeToast(this, it.getErrorMessage(getString(R.string.login_message_error)), Toast.LENGTH_LONG) + Toast.makeText(this, it.getErrorMessage(getString(R.string.login_message_error)), Toast.LENGTH_LONG).show() startActivity(Intent(this, Login::class.java)) } } diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Main.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Main.java index bfd70a448..3328a3d7f 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Main.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Main.java @@ -1,9 +1,9 @@ package com.newsblur.activity; -import static com.newsblur.service.NBSyncReceiver.UPDATE_DB_READY; -import static com.newsblur.service.NBSyncReceiver.UPDATE_METADATA; -import static com.newsblur.service.NBSyncReceiver.UPDATE_REBUILD; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STATUS; +import static com.newsblur.service.NbSyncManager.UPDATE_DB_READY; +import static com.newsblur.service.NbSyncManager.UPDATE_METADATA; +import static com.newsblur.service.NbSyncManager.UPDATE_REBUILD; +import static com.newsblur.service.NbSyncManager.UPDATE_STATUS; import android.content.Intent; import android.graphics.Bitmap; diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/MuteConfig.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/MuteConfig.java index 3d3889632..f3bb5b406 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/MuteConfig.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/MuteConfig.java @@ -1,6 +1,6 @@ package com.newsblur.activity; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STATUS; +import static com.newsblur.service.NbSyncManager.UPDATE_STATUS; import android.content.Intent; import android.database.Cursor; diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/NbActivity.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/NbActivity.kt index 95b88956c..5f6a3587f 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/NbActivity.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/NbActivity.kt @@ -1,17 +1,24 @@ package com.newsblur.activity -import android.content.IntentFilter -import androidx.appcompat.app.AppCompatActivity -import com.newsblur.util.PrefConstants.ThemeValue import android.os.Bundle -import androidx.core.content.ContextCompat +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.newsblur.database.BlurDatabaseHelper -import com.newsblur.util.PrefsUtils -import com.newsblur.util.UIUtils -import com.newsblur.service.NBSyncReceiver +import com.newsblur.service.NBSync +import com.newsblur.service.NbSyncManager import com.newsblur.util.FeedUtils import com.newsblur.util.Log +import com.newsblur.util.PrefConstants.ThemeValue +import com.newsblur.util.PrefsUtils +import com.newsblur.util.UIUtils import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject /** @@ -27,13 +34,6 @@ open class NbActivity : AppCompatActivity() { private var uniqueLoginKey: String? = null private var lastTheme: ThemeValue? = null - // Facilitates the db updates by the sync service on the UI - private val serviceSyncReceiver = object : NBSyncReceiver() { - override fun handleUpdateType(updateType: Int) { - runOnUiThread { handleUpdate(updateType) } - } - } - override fun onCreate(savedInstanceState: Bundle?) { Log.offerContext(this) Log.d(this, "onCreate") @@ -62,6 +62,19 @@ open class NbActivity : AppCompatActivity() { } finishIfNotLoggedIn() + + // Facilitates the db updates by the sync service on the UI + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.RESUMED) { + launch { + NbSyncManager.state.collectLatest { + withContext(Dispatchers.Main) { + handleSyncUpdate(it) + } + } + } + } + } } override fun onResume() { @@ -76,16 +89,11 @@ open class NbActivity : AppCompatActivity() { PrefsUtils.applyThemePreference(this) UIUtils.restartActivity(this) } - - ContextCompat.registerReceiver(this, serviceSyncReceiver, IntentFilter().apply { - addAction(NBSyncReceiver.NB_SYNC_ACTION) - }, ContextCompat.RECEIVER_NOT_EXPORTED) } override fun onPause() { Log.d(this.javaClass.name, "onPause") super.onPause() - unregisterReceiver(serviceSyncReceiver) } private fun finishIfNotLoggedIn() { @@ -109,15 +117,18 @@ open class NbActivity : AppCompatActivity() { FeedUtils.triggerSync(this) } - /** - * Called on each NB activity after the DB has been updated by the sync service. - * - * @param updateType one or more of the UPDATE_* flags in this class to indicate the - * type of update being broadcast. - */ + private fun handleSyncUpdate(nbSync: NBSync) = when (nbSync) { + is NBSync.Update -> handleUpdate(nbSync.type) + is NBSync.Error -> handleErrorMsg(nbSync.msg) + } + protected open fun handleUpdate(updateType: Int) { Log.w(this, "activity doesn't implement handleUpdate") } + + private fun handleErrorMsg(msg: String) { + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() + } } private const val UNIQUE_LOGIN_KEY = "uniqueLoginKey" \ No newline at end of file diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Reading.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Reading.kt index 7a7e6a493..b92867283 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Reading.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/activity/Reading.kt @@ -30,9 +30,9 @@ import com.newsblur.fragment.ReadingPagerFragment import com.newsblur.keyboard.KeyboardEvent import com.newsblur.keyboard.KeyboardListener import com.newsblur.keyboard.KeyboardManager -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_REBUILD -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_STATUS -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_STORY +import com.newsblur.service.NbSyncManager.UPDATE_REBUILD +import com.newsblur.service.NbSyncManager.UPDATE_STATUS +import com.newsblur.service.NbSyncManager.UPDATE_STORY import com.newsblur.service.NBSyncService import com.newsblur.util.AppConstants import com.newsblur.util.CursorFilters diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/ReadingAdapter.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/ReadingAdapter.kt index 87b9c96eb..5124aec1f 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/ReadingAdapter.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/ReadingAdapter.kt @@ -15,7 +15,7 @@ import com.newsblur.domain.Story import com.newsblur.fragment.LoadingFragment import com.newsblur.fragment.ReadingItemFragment import com.newsblur.fragment.ReadingItemFragment.Companion.newInstance -import com.newsblur.service.NBSyncReceiver +import com.newsblur.service.NbSyncManager import com.newsblur.util.Log import com.newsblur.util.NBScope import kotlinx.coroutines.Dispatchers @@ -226,7 +226,7 @@ class ReadingAdapter( for (s in stories) { fragments[s.storyHash]?.let { rif -> rif.offerStoryUpdate(s) - rif.handleUpdate(NBSyncReceiver.UPDATE_STORY) + rif.handleUpdate(NbSyncManager.UPDATE_STORY) } } } diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/DeleteFeedFragment.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/DeleteFeedFragment.java index 64e280087..700fcb9b2 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/DeleteFeedFragment.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/DeleteFeedFragment.java @@ -82,11 +82,11 @@ public class DeleteFeedFragment extends DialogFragment { @Override public void onClick(DialogInterface dialogInterface, int i) { if (getArguments().getString(FEED_TYPE).equals(NORMAL_FEED)) { - feedUtils.deleteFeed(getArguments().getString(FEED_ID), getArguments().getString(FOLDER_NAME), getActivity()); + feedUtils.deleteFeed(getArguments().getString(FEED_ID), getArguments().getString(FOLDER_NAME)); } else if (getArguments().getString(FEED_TYPE).equals(SAVED_SEARCH_FEED)) { - feedUtils.deleteSavedSearch(getArguments().getString(FEED_ID), getArguments().getString(QUERY), getActivity()); + feedUtils.deleteSavedSearch(getArguments().getString(FEED_ID), getArguments().getString(QUERY)); } else { - feedUtils.deleteSocialFeed(getArguments().getString(FEED_ID), getActivity()); + feedUtils.deleteSocialFeed(getArguments().getString(FEED_ID)); } // if called from a feed view, end it Activity activity = DeleteFeedFragment.this.getActivity(); diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/LoginAsDialogFragment.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/LoginAsDialogFragment.kt index 7dbab4f17..3967095fe 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/LoginAsDialogFragment.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/LoginAsDialogFragment.kt @@ -13,7 +13,6 @@ import com.newsblur.database.BlurDatabaseHelper import com.newsblur.databinding.LoginasDialogBinding import com.newsblur.network.APIManager import com.newsblur.util.PrefsUtils -import com.newsblur.util.UIUtils import com.newsblur.util.executeAsyncTask import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -50,7 +49,7 @@ class LoginAsDialogFragment : DialogFragment() { val startMain = Intent(requireContext(), Main::class.java) requireContext().startActivity(startMain) } else { - UIUtils.safeToast(requireActivity(), "Login as $username failed", Toast.LENGTH_LONG) + Toast.makeText(requireActivity(), "Login as $username failed", Toast.LENGTH_LONG).show() } } ) diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/ReadingItemFragment.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/ReadingItemFragment.kt index 793aa6415..1e33501cc 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/ReadingItemFragment.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/fragment/ReadingItemFragment.kt @@ -33,10 +33,10 @@ import com.newsblur.domain.Story import com.newsblur.domain.UserDetails import com.newsblur.keyboard.KeyboardManager import com.newsblur.network.APIManager -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_INTEL -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_SOCIAL -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_STORY -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_TEXT +import com.newsblur.service.NbSyncManager.UPDATE_INTEL +import com.newsblur.service.NbSyncManager.UPDATE_SOCIAL +import com.newsblur.service.NbSyncManager.UPDATE_STORY +import com.newsblur.service.NbSyncManager.UPDATE_TEXT import com.newsblur.service.OriginalTextService import com.newsblur.util.* import com.newsblur.util.PrefConstants.ThemeValue diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncReceiver.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncReceiver.kt deleted file mode 100644 index 81611efba..000000000 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncReceiver.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.newsblur.service - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent - -abstract class NBSyncReceiver : BroadcastReceiver() { - - abstract fun handleUpdateType(updateType: Int) - - override fun onReceive(context: Context?, intent: Intent?) { - if (intent?.action == NB_SYNC_ACTION) { - handleUpdateType(intent.getIntExtra(NB_SYNC_UPDATE_TYPE, 0)) - } - } - - companion object { - const val NB_SYNC_ACTION = "nb.sync.action" - const val NB_SYNC_ERROR_MESSAGE = "nb_sync_error_msg" - const val NB_SYNC_UPDATE_TYPE = "nb_sync_update_type" - - const val UPDATE_DB_READY = 1 shl 0 - const val UPDATE_METADATA = 1 shl 1 - const val UPDATE_STORY = 1 shl 2 - const val UPDATE_SOCIAL = 1 shl 3 - const val UPDATE_INTEL = 1 shl 4 - const val UPDATE_STATUS = 1 shl 5 - const val UPDATE_TEXT = 1 shl 6 - const val UPDATE_REBUILD = 1 shl 7 - } -} \ No newline at end of file diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncService.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncService.java index bc3b6ca9c..f31f7fa42 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncService.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NBSyncService.java @@ -13,11 +13,11 @@ import com.newsblur.NbApplication; import com.newsblur.R; import com.newsblur.database.BlurDatabaseHelper; import static com.newsblur.database.BlurDatabaseHelper.closeQuietly; -import static com.newsblur.service.NBSyncReceiver.UPDATE_DB_READY; -import static com.newsblur.service.NBSyncReceiver.UPDATE_METADATA; -import static com.newsblur.service.NBSyncReceiver.UPDATE_REBUILD; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STATUS; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STORY; +import static com.newsblur.service.NbSyncManager.UPDATE_DB_READY; +import static com.newsblur.service.NbSyncManager.UPDATE_METADATA; +import static com.newsblur.service.NbSyncManager.UPDATE_REBUILD; +import static com.newsblur.service.NbSyncManager.UPDATE_STATUS; +import static com.newsblur.service.NbSyncManager.UPDATE_STORY; import androidx.annotation.NonNull; @@ -47,10 +47,7 @@ import com.newsblur.util.NetworkUtils; import com.newsblur.util.NotificationUtils; import com.newsblur.util.PrefsUtils; import com.newsblur.util.ReadingAction; -import com.newsblur.util.ReadFilter; import com.newsblur.util.StateFilter; -import com.newsblur.util.StoryOrder; -import com.newsblur.util.UIUtils; import com.newsblur.widget.WidgetUtils; import java.util.ArrayList; @@ -272,6 +269,12 @@ public class NBSyncService extends JobService { return false; } + @Override + public void onNetworkChanged(@NonNull JobParameters params) { + super.onNetworkChanged(params); + com.newsblur.util.Log.d(this, "onNetworkChanged"); + } + /** * Do the actual work of syncing. */ @@ -1160,7 +1163,7 @@ public class NBSyncService extends JobService { dbHelper.prepareReadingSession(fs, cursorFilters.getStateFilter(), cursorFilters.getReadFilter()); // note which feedset we are loading so we can trigger another reset when it changes dbHelper.setSessionFeedSet(fs); - UIUtils.syncUpdateStatus(context, UPDATE_STORY | UPDATE_STATUS); + NbSyncManager.submitUpdate(UPDATE_STORY | UPDATE_STATUS); } } } @@ -1270,15 +1273,11 @@ public class NBSyncService extends JobService { } protected void sendSyncUpdate(int update) { - Intent i = new Intent(NBSyncReceiver.NB_SYNC_ACTION); - i.putExtra(NBSyncReceiver.NB_SYNC_UPDATE_TYPE, update); - broadcastSync(i); + NbSyncManager.submitUpdate(UPDATE_STORY | UPDATE_STATUS); } protected void sendToastError(@NonNull String message) { - Intent i = new Intent(NBSyncReceiver.NB_SYNC_ACTION); - i.putExtra(NBSyncReceiver.NB_SYNC_ERROR_MESSAGE, message); - broadcastSync(i); + NbSyncManager.submitError(message); } private void broadcastSync(@NonNull Intent intent) { diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NbSyncManager.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NbSyncManager.kt new file mode 100644 index 000000000..814d9afee --- /dev/null +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/NbSyncManager.kt @@ -0,0 +1,44 @@ +package com.newsblur.service + +import com.newsblur.util.NBScope +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.launch + +object NbSyncManager { + + const val UPDATE_DB_READY = 1 shl 0 + const val UPDATE_METADATA = 1 shl 1 + const val UPDATE_STORY = 1 shl 2 + const val UPDATE_SOCIAL = 1 shl 3 + const val UPDATE_INTEL = 1 shl 4 + const val UPDATE_STATUS = 1 shl 5 + const val UPDATE_TEXT = 1 shl 6 + const val UPDATE_REBUILD = 1 shl 7 + + private val _state = MutableSharedFlow() + val state = _state.asSharedFlow() + + @JvmStatic + fun submitUpdate(type: Int) = submit(NBSync.Update(type)) + + @JvmStatic + fun submitError(msg: String) = submit(NBSync.Error(msg)) + + private fun submit(nbSync: NBSync) { + NBScope.launch { + _state.emit(nbSync) + } + } +} + +sealed class NBSync { + + data class Error( + val msg: String, + ) : NBSync() + + data class Update( + val type: Int, + ) : NBSync() +} \ No newline at end of file diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/OriginalTextService.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/OriginalTextService.java index b54a04b18..528a39426 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/OriginalTextService.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/OriginalTextService.java @@ -1,6 +1,6 @@ package com.newsblur.service; -import static com.newsblur.service.NBSyncReceiver.UPDATE_TEXT; +import static com.newsblur.service.NbSyncManager.UPDATE_TEXT; import com.newsblur.database.DatabaseConstants; import com.newsblur.network.domain.StoryTextResponse; diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/SubService.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/SubService.kt index 3c051a44d..f0a50d3be 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/SubService.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/service/SubService.kt @@ -36,7 +36,7 @@ abstract class SubService( if (isActive) { parent.checkCompletion() - parent.sendSyncUpdate(NBSyncReceiver.UPDATE_STATUS) + parent.sendSyncUpdate(NbSyncManager.UPDATE_STATUS) } } } diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/FeedUtils.kt b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/FeedUtils.kt index 0a8c88fab..54d92897a 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/FeedUtils.kt +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/FeedUtils.kt @@ -13,15 +13,14 @@ import com.newsblur.domain.Story import com.newsblur.fragment.ReadingActionConfirmationFragment import com.newsblur.network.APIConstants import com.newsblur.network.APIManager -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_METADATA -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_SOCIAL -import com.newsblur.service.NBSyncReceiver.Companion.UPDATE_STORY +import com.newsblur.service.NbSyncManager.UPDATE_METADATA +import com.newsblur.service.NbSyncManager.UPDATE_SOCIAL +import com.newsblur.service.NbSyncManager.UPDATE_STORY import com.newsblur.service.NBSyncService import com.newsblur.service.OriginalTextService import com.newsblur.util.FeedExt.disableNotification import com.newsblur.util.FeedExt.setNotifyFocus import com.newsblur.util.FeedExt.setNotifyUnread -import com.newsblur.util.UIUtils.syncUpdateStatus class FeedUtils( private val dbHelper: BlurDatabaseHelper, @@ -67,14 +66,14 @@ class FeedUtils( doInBackground = { val ra = if (saved) ReadingAction.saveStory(storyHash, userTags) else ReadingAction.unsaveStory(storyHash) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_STORY) + syncUpdateStatus(UPDATE_STORY) dbHelper.enqueueAction(ra) triggerSync(context) } ) } - fun deleteSavedSearch(feedId: String?, query: String?, context: Context) { + fun deleteSavedSearch(feedId: String?, query: String?) { NBScope.executeAsyncTask( doInBackground = { apiManager.deleteSearch(feedId, query) @@ -82,7 +81,7 @@ class FeedUtils( onPostExecute = { newsBlurResponse -> if (!newsBlurResponse.isError) { dbHelper.deleteSavedSearch(feedId, query) - syncUpdateStatus(context, UPDATE_METADATA) + syncUpdateStatus(UPDATE_METADATA) } } ) @@ -102,7 +101,7 @@ class FeedUtils( ) } - fun deleteFeed(feedId: String?, folderName: String?, context: Context) { + fun deleteFeed(feedId: String?, folderName: String?) { NBScope.executeAsyncTask( doInBackground = { apiManager.deleteFeed(feedId, folderName) @@ -110,12 +109,12 @@ class FeedUtils( onPostExecute = { // TODO: we can't check result.isError() because the delete call sets the .message property on all calls. find a better error check dbHelper.deleteFeed(feedId) - syncUpdateStatus(context, UPDATE_METADATA) + syncUpdateStatus(UPDATE_METADATA) } ) } - fun deleteSocialFeed(userId: String?, context: Context) { + fun deleteSocialFeed(userId: String?) { NBScope.executeAsyncTask( doInBackground = { apiManager.unfollowUser(userId) @@ -123,7 +122,7 @@ class FeedUtils( onPostExecute = { // TODO: we can't check result.isError() because the delete call sets the .message property on all calls. find a better error check dbHelper.deleteSocialFeed(userId) - syncUpdateStatus(context, UPDATE_METADATA) + syncUpdateStatus(UPDATE_METADATA) } ) } @@ -190,7 +189,7 @@ class FeedUtils( // update unread state and unread counts in the local DB val impactedFeeds = dbHelper.setStoryReadState(story, read) - syncUpdateStatus(context, UPDATE_STORY) + syncUpdateStatus(UPDATE_STORY) NBSyncService.addRecountCandidates(impactedFeeds) triggerSync(context) @@ -310,7 +309,7 @@ class FeedUtils( doInBackground = { dbHelper.enqueueAction(ra) val impact = ra.doLocal(context, dbHelper) - syncUpdateStatus(context, impact) + syncUpdateStatus(impact) triggerSync(context) } ) @@ -353,7 +352,7 @@ class FeedUtils( val ra = ReadingAction.shareStory(story.storyHash, story.id, story.feedId, sourceUserId, comment) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL or UPDATE_STORY) + syncUpdateStatus(UPDATE_SOCIAL or UPDATE_STORY) triggerSync(context) } @@ -361,7 +360,7 @@ class FeedUtils( val ra = ReadingAction.renameFeed(feedId, newFeedName) dbHelper.enqueueAction(ra) val impact = ra.doLocal(context, dbHelper) - syncUpdateStatus(context, impact) + syncUpdateStatus(impact) triggerSync(context) } @@ -369,7 +368,7 @@ class FeedUtils( val ra = ReadingAction.unshareStory(story.storyHash, story.id, story.feedId) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL or UPDATE_STORY) + syncUpdateStatus(UPDATE_SOCIAL or UPDATE_STORY) triggerSync(context) } @@ -377,7 +376,7 @@ class FeedUtils( val ra = ReadingAction.likeComment(story.id, commentUserId, story.feedId) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL) + syncUpdateStatus(UPDATE_SOCIAL) triggerSync(context) } @@ -385,7 +384,7 @@ class FeedUtils( val ra = ReadingAction.unlikeComment(story.id, commentUserId, story.feedId) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL) + syncUpdateStatus(UPDATE_SOCIAL) triggerSync(context) } @@ -393,7 +392,7 @@ class FeedUtils( val ra = ReadingAction.replyToComment(storyId, feedId, commentUserId, replyText) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL) + syncUpdateStatus(UPDATE_SOCIAL) triggerSync(context) } @@ -401,7 +400,7 @@ class FeedUtils( val ra = ReadingAction.updateReply(story.id, story.feedId, commentUserId, replyId, replyText) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL) + syncUpdateStatus(UPDATE_SOCIAL) triggerSync(context) } @@ -409,7 +408,7 @@ class FeedUtils( val ra = ReadingAction.deleteReply(story.id, story.feedId, commentUserId, replyId) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_SOCIAL) + syncUpdateStatus(UPDATE_SOCIAL) triggerSync(context) } @@ -455,7 +454,7 @@ class FeedUtils( dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_METADATA) + syncUpdateStatus(UPDATE_METADATA) triggerSync(context) } ) @@ -465,7 +464,7 @@ class FeedUtils( val ra = ReadingAction.instaFetch(feedId) dbHelper.enqueueAction(ra) ra.doLocal(context, dbHelper) - syncUpdateStatus(context, UPDATE_METADATA) + syncUpdateStatus(UPDATE_METADATA) triggerSync(context) } @@ -487,6 +486,10 @@ class FeedUtils( UIUtils.handleUri(context, Uri.parse(url)) } + private fun syncUpdateStatus(updateType: Int) { + + } + companion object { @JvmStatic diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/ReadingAction.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/ReadingAction.java index d447e82ea..3377357af 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/ReadingAction.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/ReadingAction.java @@ -1,9 +1,9 @@ package com.newsblur.util; -import static com.newsblur.service.NBSyncReceiver.UPDATE_INTEL; -import static com.newsblur.service.NBSyncReceiver.UPDATE_METADATA; -import static com.newsblur.service.NBSyncReceiver.UPDATE_SOCIAL; -import static com.newsblur.service.NBSyncReceiver.UPDATE_STORY; +import static com.newsblur.service.NbSyncManager.UPDATE_INTEL; +import static com.newsblur.service.NbSyncManager.UPDATE_METADATA; +import static com.newsblur.service.NbSyncManager.UPDATE_SOCIAL; +import static com.newsblur.service.NbSyncManager.UPDATE_STORY; import android.content.ContentValues; import android.content.Context; @@ -18,7 +18,7 @@ import com.newsblur.network.domain.CommentResponse; import com.newsblur.network.domain.NewsBlurResponse; import com.newsblur.network.domain.StoriesResponse; import com.newsblur.network.APIManager; -import com.newsblur.service.NBSyncReceiver; +import com.newsblur.service.NbSyncManager; import com.newsblur.service.NBSyncService; import java.util.ArrayList; @@ -375,7 +375,7 @@ public class ReadingAction implements Serializable { } else { com.newsblur.util.Log.w(this, "failed to refresh story data after action"); } - impact |= NBSyncReceiver.UPDATE_SOCIAL; + impact |= NbSyncManager.UPDATE_SOCIAL; } if (commentResponse != null) { result = commentResponse; @@ -384,7 +384,7 @@ public class ReadingAction implements Serializable { } else { com.newsblur.util.Log.w(this, "failed to refresh comment data after action"); } - impact |= NBSyncReceiver.UPDATE_SOCIAL; + impact |= NbSyncManager.UPDATE_SOCIAL; } if (result != null && impact != 0) { result.impactCode = impact; diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/UIUtils.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/UIUtils.java index 48ba5964e..1c343747c 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/UIUtils.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/util/UIUtils.java @@ -34,7 +34,6 @@ import android.view.MenuInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; @@ -48,17 +47,15 @@ import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.color.MaterialColors; import com.google.android.material.snackbar.Snackbar; -import com.newsblur.NbApplication; import com.newsblur.R; import com.newsblur.activity.*; import com.newsblur.domain.Classifier; import com.newsblur.domain.Story; -import com.newsblur.service.NBSyncReceiver; public class UIUtils { private UIUtils() {} // util class - no instances - + public static Bitmap clipAndRound(Bitmap source, boolean roundCorners, boolean clipSquare) { Bitmap result = source; if (clipSquare) { @@ -223,28 +220,6 @@ public class UIUtils { return iconView; } - /** - * Shows a toast in a circumstance where the context might be null. This can very - * rarely happen when toasts are done from async tasks and the context is finished - * before the task completes, resulting in a crash. This prevents the crash at the - * cost of the toast not being shown. - */ - public static void safeToast(final Activity c, final int rid, final int duration) { - if (c != null) { - c.runOnUiThread(new Runnable() { public void run() { - Toast.makeText(c, rid, duration).show(); - }}); - } - } - - public static void safeToast(final Activity c, final String text, final int duration) { - if ((c != null) && (text != null)) { - c.runOnUiThread(new Runnable() { public void run() { - Toast.makeText(c, text, duration).show(); - }}); - } - } - /** * Restart an activity. See http://stackoverflow.com/a/11651252/70795 * We post this on the Handler to allow onResume to finish before the activity restarts @@ -605,14 +580,6 @@ public class UIUtils { } } - public static void syncUpdateStatus(Context context, int updateType) { - if (NbApplication.isAppForeground()) { - Intent intent = new Intent(NBSyncReceiver.NB_SYNC_ACTION); - intent.putExtra(NBSyncReceiver.NB_SYNC_UPDATE_TYPE, updateType); - context.sendBroadcast(intent); - } - } - public static void showSnackBar(View view, String message) { Snackbar.make(view, message, 600).show(); } diff --git a/clients/android/NewsBlur/buildSrc/src/main/java/Dependencies.kt b/clients/android/NewsBlur/buildSrc/src/main/java/Dependencies.kt index fe2bb9abf..faa769120 100644 --- a/clients/android/NewsBlur/buildSrc/src/main/java/Dependencies.kt +++ b/clients/android/NewsBlur/buildSrc/src/main/java/Dependencies.kt @@ -13,7 +13,6 @@ object Dependencies { const val lifecycleRuntime = "androidx.lifecycle:lifecycle-runtime-ktx:${Version.lifecycle}" const val lifecycleProcess = "androidx.lifecycle:lifecycle-process:${Version.lifecycle}" const val splashScreen = "androidx.core:core-splashscreen:${Version.splashScreen}" - const val coreKtx = "androidx.core:core-ktx:${Version.coreKtx}" const val hiltAndroid = "com.google.dagger:hilt-android:${Version.hilt}" const val hiltCompiler = "com.google.dagger:hilt-compiler:${Version.hilt}" const val profileInstaller = "androidx.profileinstaller:profileinstaller:${Version.profileInstaller}" diff --git a/clients/android/NewsBlur/buildSrc/src/main/java/Version.kt b/clients/android/NewsBlur/buildSrc/src/main/java/Version.kt index 06554766c..3ae2aff09 100644 --- a/clients/android/NewsBlur/buildSrc/src/main/java/Version.kt +++ b/clients/android/NewsBlur/buildSrc/src/main/java/Version.kt @@ -18,7 +18,6 @@ object Version { const val browser = "1.8.0" const val lifecycle = "2.7.0" const val splashScreen = "1.0.1" - const val coreKtx = "1.12.0" const val hilt = "2.51" const val profileInstaller = "1.3.1"