Skip to content

Commit

Permalink
Closes #122; Implement compact "Add Transaction" widget
Browse files Browse the repository at this point in the history
  • Loading branch information
Iliyan Germanov committed Nov 16, 2021
1 parent 0c25f38 commit deaac47
Show file tree
Hide file tree
Showing 8 changed files with 160 additions and 21 deletions.
11 changes: 10 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,16 @@
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/transaction_widget_info" />
android:resource="@xml/add_transaction_widget_info" />
</receiver>

<receiver android:name=".widget.AddTransactionWidgetCompact">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/add_transaction_widget_compact_info" />
</receiver>
</application>

Expand Down
21 changes: 1 addition & 20 deletions app/src/main/java/com/ivy/wallet/widget/AddTransactionWidget.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,16 @@ package com.ivy.wallet.widget

import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
import com.ivy.wallet.R
import timber.log.Timber

class AddTransactionWidget : AppWidgetProvider() {

companion object {
fun updateBroadcast(context: Context) {
Timber.d("update()")
val intent = Intent(context, AddTransactionWidget::class.java)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
val appWidgetManager = AppWidgetManager.getInstance(context)
intent.putExtra(
AppWidgetManager.EXTRA_APPWIDGET_IDS,
getAppWidgetIds(context, appWidgetManager)
)
context.sendBroadcast(intent)
}

private fun getAppWidgetIds(
context: Context,
appWidgetManager: AppWidgetManager
): IntArray? {
val ivyWidgetComponent =
ComponentName(context, AddTransactionWidget::class.java)
return appWidgetManager.getAppWidgetIds(ivyWidgetComponent)
WidgetBase.updateBroadcast(context, AddTransactionWidget::class.java)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.ivy.wallet.widget

import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.widget.RemoteViews
import com.ivy.wallet.R

class AddTransactionWidgetCompact : AppWidgetProvider() {

companion object {
fun updateBroadcast(context: Context) {
WidgetBase.updateBroadcast(context, AddTransactionWidgetCompact::class.java)
}
}

override fun onEnabled(context: Context) {
super.onEnabled(context)
updateBroadcast(context)
}

//--------------------------- </BROADCASTS> ----------------------------------------------------
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}

private fun updateAppWidget(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetId: Int
) {
val rv = RemoteViews(context.packageName, R.layout.widget_add_transaction_compact)
val clickSetup = AddTransactionWidgetClick.Setup(context, rv, appWidgetId)

clickSetup.clickListener(R.id.ivIncome, AddTransactionWidgetClick.ACTION_ADD_INCOME)

clickSetup.clickListener(R.id.ivExpense, AddTransactionWidgetClick.ACTION_ADD_EXPENSE)

clickSetup.clickListener(R.id.ivTransfer, AddTransactionWidgetClick.ACTION_ADD_TRANSFER)

appWidgetManager.updateAppWidget(appWidgetId, rv)
}

override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
val widgetClick = AddTransactionWidgetClick()
widgetClick.handleClick(context, intent)
}
}
38 changes: 38 additions & 0 deletions app/src/main/java/com/ivy/wallet/widget/WidgetBase.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.ivy.wallet.widget

import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import timber.log.Timber

class WidgetBase {
companion object {
fun <T> updateBroadcast(context: Context, widget: Class<T>) {
Timber.d("update()")
val intent = Intent(context, widget)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
val appWidgetManager = AppWidgetManager.getInstance(context)
intent.putExtra(
AppWidgetManager.EXTRA_APPWIDGET_IDS,
getAppWidgetIds(
context = context,
appWidgetManager = appWidgetManager,
widget = widget
)
)
context.sendBroadcast(intent)
}

private fun <T> getAppWidgetIds(
context: Context,
appWidgetManager: AppWidgetManager,
widget: Class<T>
): IntArray? {
val ivyWidgetComponent =
ComponentName(context, widget)
return appWidgetManager.getAppWidgetIds(ivyWidgetComponent)
}
}

}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 48 additions & 0 deletions app/src/main/res/layout/widget_add_transaction_compact.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlWidgetRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal"
tools:background="@color/white">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@drawable/shape_widget_background"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingTop="12dp"
android:paddingRight="16dp"
android:paddingBottom="14dp">


<ImageView
android:id="@+id/ivIncome"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="48dp"
android:src="@drawable/ic_widget_income" />


<ImageView
android:id="@+id/ivExpense"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="48dp"
android:src="@drawable/ic_widget_expense" />


<ImageView
android:id="@+id/ivTransfer"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="48dp"
android:src="@drawable/ic_widget_transfer" />
</LinearLayout>

</LinearLayout>
7 changes: 7 additions & 0 deletions app/src/main/res/xml/add_transaction_widget_compact_info.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_add_transaction"
android:minWidth="110dp"
android:minResizeWidth="40dp"
android:previewImage="@drawable/preview_widget_add_trn_compact"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="0" />

0 comments on commit deaac47

Please sign in to comment.