Loading app/src/main/AndroidManifest.xml +2 −3 Original line number Diff line number Diff line Loading @@ -11,13 +11,12 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="io.heckel.ntfy.MainActivity"> <activity android:name="io.heckel.ntfy.ui.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="io.heckel.ntfy.add.AddTopicActivity" /> <activity android:name="io.heckel.ntfy.detail.DetailActivity" /> <activity android:name="io.heckel.ntfy.ui.DetailActivity" /> </application> </manifest> app/src/main/java/io/heckel/ntfy/AddFragment.kt→app/src/main/java/io/heckel/ntfy/ui/AddFragment.kt +2 −1 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.app.AlertDialog import android.app.Dialog Loading @@ -9,6 +9,7 @@ import android.view.View import android.widget.CheckBox import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputEditText import io.heckel.ntfy.R class AddFragment(private val listener: Listener) : DialogFragment() { interface Listener { Loading app/src/main/java/io/heckel/ntfy/detail/DetailActivity.kt→app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +1 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package io.heckel.ntfy.detail package io.heckel.ntfy.ui import android.os.Bundle import android.widget.Button Loading @@ -22,9 +22,6 @@ import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import io.heckel.ntfy.R import io.heckel.ntfy.SUBSCRIPTION_ID import io.heckel.ntfy.SubscriptionsViewModel import io.heckel.ntfy.SubscriptionsViewModelFactory import io.heckel.ntfy.data.topicShortUrl class DetailActivity : AppCompatActivity() { Loading app/src/main/java/io/heckel/ntfy/MainActivity.kt→app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +24 −3 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.recyclerview.widget.RecyclerView import io.heckel.ntfy.R import io.heckel.ntfy.data.Notification import io.heckel.ntfy.data.Status import io.heckel.ntfy.data.Subscription import io.heckel.ntfy.data.topicShortUrl import io.heckel.ntfy.detail.DetailActivity import kotlin.random.Random const val SUBSCRIPTION_ID = "topic_id" Loading @@ -43,7 +46,6 @@ class MainActivity : AppCompatActivity(), AddFragment.Listener { subscriptionViewModel.list().observe(this) { it?.let { println("new data arrived: $it") adapter.submitList(it as MutableList<Subscription>) } } Loading @@ -53,6 +55,25 @@ class MainActivity : AppCompatActivity(), AddFragment.Listener { subscriptionViewModel.setListener { n -> displayNotification(n) } } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.menu_action_source -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.menu_source_url)))) true } R.id.menu_action_website -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.menu_website_url)))) true } else -> super.onOptionsItemSelected(item) } } /* Opens detail view when list item is clicked. */ private fun subscriptionOnClick(subscription: Subscription) { val intent = Intent(this, DetailActivity()::class.java) Loading app/src/main/java/io/heckel/ntfy/SubscriptionsAdapter.kt→app/src/main/java/io/heckel/ntfy/ui/SubscriptionsAdapter.kt +2 −4 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.content.Context import android.view.LayoutInflater Loading @@ -8,6 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import io.heckel.ntfy.R import io.heckel.ntfy.data.Status import io.heckel.ntfy.data.Subscription import io.heckel.ntfy.data.topicUrl Loading @@ -32,7 +33,6 @@ class TopicsAdapter(private val onClick: (Subscription) -> Unit) : } fun bind(subscription: Subscription) { println("bind sub: $subscription") this.topic = subscription val statusText = when (subscription.status) { Status.CONNECTING -> context.getString(R.string.status_connecting) Loading Loading @@ -64,12 +64,10 @@ class TopicsAdapter(private val onClick: (Subscription) -> Unit) : object TopicDiffCallback : DiffUtil.ItemCallback<Subscription>() { override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean { println("areItemsTheSame: $oldItem.id ==? $newItem.id") return oldItem.id == newItem.id } override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean { println("areContentsTheSame: $oldItem ==? $newItem") return oldItem == newItem } } Loading
app/src/main/AndroidManifest.xml +2 −3 Original line number Diff line number Diff line Loading @@ -11,13 +11,12 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="io.heckel.ntfy.MainActivity"> <activity android:name="io.heckel.ntfy.ui.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="io.heckel.ntfy.add.AddTopicActivity" /> <activity android:name="io.heckel.ntfy.detail.DetailActivity" /> <activity android:name="io.heckel.ntfy.ui.DetailActivity" /> </application> </manifest>
app/src/main/java/io/heckel/ntfy/AddFragment.kt→app/src/main/java/io/heckel/ntfy/ui/AddFragment.kt +2 −1 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.app.AlertDialog import android.app.Dialog Loading @@ -9,6 +9,7 @@ import android.view.View import android.widget.CheckBox import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputEditText import io.heckel.ntfy.R class AddFragment(private val listener: Listener) : DialogFragment() { interface Listener { Loading
app/src/main/java/io/heckel/ntfy/detail/DetailActivity.kt→app/src/main/java/io/heckel/ntfy/ui/DetailActivity.kt +1 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package io.heckel.ntfy.detail package io.heckel.ntfy.ui import android.os.Bundle import android.widget.Button Loading @@ -22,9 +22,6 @@ import android.widget.TextView import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import io.heckel.ntfy.R import io.heckel.ntfy.SUBSCRIPTION_ID import io.heckel.ntfy.SubscriptionsViewModel import io.heckel.ntfy.SubscriptionsViewModelFactory import io.heckel.ntfy.data.topicShortUrl class DetailActivity : AppCompatActivity() { Loading
app/src/main/java/io/heckel/ntfy/MainActivity.kt→app/src/main/java/io/heckel/ntfy/ui/MainActivity.kt +24 −3 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.recyclerview.widget.RecyclerView import io.heckel.ntfy.R import io.heckel.ntfy.data.Notification import io.heckel.ntfy.data.Status import io.heckel.ntfy.data.Subscription import io.heckel.ntfy.data.topicShortUrl import io.heckel.ntfy.detail.DetailActivity import kotlin.random.Random const val SUBSCRIPTION_ID = "topic_id" Loading @@ -43,7 +46,6 @@ class MainActivity : AppCompatActivity(), AddFragment.Listener { subscriptionViewModel.list().observe(this) { it?.let { println("new data arrived: $it") adapter.submitList(it as MutableList<Subscription>) } } Loading @@ -53,6 +55,25 @@ class MainActivity : AppCompatActivity(), AddFragment.Listener { subscriptionViewModel.setListener { n -> displayNotification(n) } } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.menu_action_source -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.menu_source_url)))) true } R.id.menu_action_website -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.menu_website_url)))) true } else -> super.onOptionsItemSelected(item) } } /* Opens detail view when list item is clicked. */ private fun subscriptionOnClick(subscription: Subscription) { val intent = Intent(this, DetailActivity()::class.java) Loading
app/src/main/java/io/heckel/ntfy/SubscriptionsAdapter.kt→app/src/main/java/io/heckel/ntfy/ui/SubscriptionsAdapter.kt +2 −4 Original line number Diff line number Diff line package io.heckel.ntfy package io.heckel.ntfy.ui import android.content.Context import android.view.LayoutInflater Loading @@ -8,6 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import io.heckel.ntfy.R import io.heckel.ntfy.data.Status import io.heckel.ntfy.data.Subscription import io.heckel.ntfy.data.topicUrl Loading @@ -32,7 +33,6 @@ class TopicsAdapter(private val onClick: (Subscription) -> Unit) : } fun bind(subscription: Subscription) { println("bind sub: $subscription") this.topic = subscription val statusText = when (subscription.status) { Status.CONNECTING -> context.getString(R.string.status_connecting) Loading Loading @@ -64,12 +64,10 @@ class TopicsAdapter(private val onClick: (Subscription) -> Unit) : object TopicDiffCallback : DiffUtil.ItemCallback<Subscription>() { override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean { println("areItemsTheSame: $oldItem.id ==? $newItem.id") return oldItem.id == newItem.id } override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean { println("areContentsTheSame: $oldItem ==? $newItem") return oldItem == newItem } }