Menu
This commit is contained in:
parent
e28a80d6b6
commit
d2f04323f9
10 changed files with 55 additions and 27 deletions
|
@ -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>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package io.heckel.ntfy
|
||||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.app.Dialog
|
||||
|
@ -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 {
|
|
@ -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
|
||||
|
@ -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() {
|
|
@ -1,22 +1,25 @@
|
|||
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"
|
||||
|
@ -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>)
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
|
@ -1,4 +1,4 @@
|
|||
package io.heckel.ntfy
|
||||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package io.heckel.ntfy
|
||||
package io.heckel.ntfy.ui
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.ViewModel
|
5
app/src/main/res/menu/menu.xml
Normal file
5
app/src/main/res/menu/menu.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item android:id="@+id/menu_action_source"
|
||||
android:title="@string/menu_source_title"/>
|
||||
<item android:title="@string/menu_website_title" android:id="@+id/menu_action_website"/>
|
||||
</menu>
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#3949ab</color>
|
||||
<color name="colorPrimaryDark">#3949ab</color>
|
||||
<!--<color name="colorAccent">#03DAC5</color>-->
|
||||
<color name="primaryColor">#3949ab</color>
|
||||
<color name="primaryLightColor">#6f74dd</color>
|
||||
<color name="primaryDarkColor">#00227b</color>
|
||||
<color name="primaryTextColor">#ffffff</color>
|
||||
</resources>
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
<string name="fab_content_description">fab</string>
|
||||
<string name="remove_topic">Unsubscribe</string>
|
||||
|
||||
<!-- Menu -->
|
||||
<string name="menu_source_title">Show source & license</string>
|
||||
<string name="menu_source_url">https://heckel.io/ntfy-android</string>
|
||||
<string name="menu_website_title">Visit ntfy.sh</string>
|
||||
<string name="menu_website_url">https://ntfy.sh</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<string name="notification_channel_name">Ntfy</string>
|
||||
<string name="notification_channel_id">ntfy</string>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<resources>
|
||||
<!-- Base application theme. -->
|
||||
<!-- No action bar, https://stackoverflow.com/a/36236700 -->
|
||||
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
|
||||
<!--<item name="colorSecondary">@color/colorAccent</item>-->
|
||||
<!--<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>-->
|
||||
<!--<item name="android:windowFullscreen">true</item>-->
|
||||
<item name="colorPrimary">@color/primaryColor</item>
|
||||
<item name="colorPrimaryVariant">@color/primaryDarkColor</item>
|
||||
<item name="colorAccent">@color/primaryColor</item>
|
||||
<!--
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
-->
|
||||
</style>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue