Skip to content

Commit 8322fe6

Browse files
authored
Merge pull request #600 from czan/widget-option-display-balance
Make widgets able to hide the account balance - closes #598
2 parents a395e8b + 290c712 commit 8322fe6

File tree

5 files changed

+42
-12
lines changed

5 files changed

+42
-12
lines changed

app/src/main/java/org/gnucash/android/receivers/TransactionAppWidgetProvider.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.appwidget.AppWidgetManager;
1919
import android.appwidget.AppWidgetProvider;
2020
import android.content.Context;
21+
import android.content.SharedPreferences;
2122
import android.content.SharedPreferences.Editor;
2223
import android.preference.PreferenceManager;
2324

@@ -42,14 +43,15 @@ public void onUpdate(Context context, AppWidgetManager appWidgetManager,
4243
// Perform this loop procedure for each App Widget that belongs to this provider
4344
for (int i=0; i<N; i++) {
4445
int appWidgetId = appWidgetIds[i];
45-
46-
String accountUID = PreferenceManager
47-
.getDefaultSharedPreferences(context)
46+
SharedPreferences defaultSharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
47+
String accountUID = defaultSharedPrefs
4848
.getString(UxArgument.SELECTED_ACCOUNT_UID + appWidgetId, null);
49+
boolean shouldDisplayBalance = defaultSharedPrefs
50+
.getBoolean(UxArgument.SHOULD_DISPLAY_BALANCE + appWidgetId, true);
4951
if (accountUID == null)
5052
return;
5153

52-
WidgetConfigurationActivity.updateWidget(context, appWidgetId, accountUID);
54+
WidgetConfigurationActivity.updateWidget(context, appWidgetId, accountUID, shouldDisplayBalance);
5355
}
5456
}
5557

app/src/main/java/org/gnucash/android/ui/common/UxArgument.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public final class UxArgument {
7272
*/
7373
public static final String SELECTED_ACCOUNT_UID = "account_uid";
7474

75+
/**
76+
* Key for passing whether a widget should display the balance
77+
*/
78+
public static final String SHOULD_DISPLAY_BALANCE = "should_display_balance";
79+
7580
/**
7681
* Key for passing argument for the parent account GUID.
7782
*/

app/src/main/java/org/gnucash/android/ui/homescreen/WidgetConfigurationActivity.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import android.util.Log;
3232
import android.view.View;
3333
import android.widget.Button;
34+
import android.widget.CheckBox;
3435
import android.widget.RemoteViews;
3536
import android.widget.Spinner;
3637
import android.widget.Toast;
@@ -58,6 +59,7 @@ public class WidgetConfigurationActivity extends Activity {
5859
private int mAppWidgetId;
5960

6061
private Spinner mAccountsSpinner;
62+
private CheckBox mShouldDisplayBalance;
6163
private Button mOkButton;
6264
private Button mCancelButton;
6365

@@ -68,6 +70,7 @@ public void onCreate(Bundle savedInstanceState) {
6870
setResult(RESULT_CANCELED);
6971

7072
mAccountsSpinner = (Spinner) findViewById(R.id.input_accounts_spinner);
73+
mShouldDisplayBalance = (CheckBox) findViewById(R.id.input_should_display_balance);
7174
mOkButton = (Button) findViewById(R.id.btn_save);
7275
mCancelButton = (Button) findViewById(R.id.btn_cancel);
7376

@@ -83,7 +86,11 @@ public void onCreate(Bundle savedInstanceState) {
8386
//without this line, the app crashes when a user tries to select an account
8487
cursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
8588
mAccountsSpinner.setAdapter(cursorAdapter);
86-
89+
90+
boolean passcodeEnabled = PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
91+
.getBoolean(UxArgument.ENABLED_PASSCODE, false);
92+
mShouldDisplayBalance.setChecked(!passcodeEnabled);
93+
8794
bindListeners();
8895
}
8996

@@ -109,13 +116,15 @@ public void onClick(View v) {
109116
}
110117

111118
long accountId = mAccountsSpinner.getSelectedItemId();
119+
boolean shouldDisplayBalance = mShouldDisplayBalance.isChecked();
112120
String accountUID = mAccountsDbAdapter.getUID(accountId);
113121
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(WidgetConfigurationActivity.this);
114122
Editor editor = prefs.edit();
115123
editor.putString(UxArgument.SELECTED_ACCOUNT_UID + mAppWidgetId, accountUID);
124+
editor.putBoolean(UxArgument.SHOULD_DISPLAY_BALANCE + mAppWidgetId, shouldDisplayBalance);
116125
editor.commit();
117126

118-
updateWidget(WidgetConfigurationActivity.this, mAppWidgetId, accountUID);
127+
updateWidget(WidgetConfigurationActivity.this, mAppWidgetId, accountUID, shouldDisplayBalance);
119128

120129
Intent resultValue = new Intent();
121130
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
@@ -140,7 +149,7 @@ public void onClick(View v) {
140149
* @param appWidgetId ID of the widget to be updated
141150
* @param accountUID GUID of the account tied to the widget
142151
*/
143-
public static void updateWidget(final Context context, int appWidgetId, String accountUID) {
152+
public static void updateWidget(final Context context, int appWidgetId, String accountUID, boolean shouldDisplayBalance) {
144153
Log.i("WidgetConfiguration", "Updating widget: " + appWidgetId);
145154
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
146155

@@ -173,10 +182,14 @@ public static void updateWidget(final Context context, int appWidgetId, String a
173182

174183
Money accountBalance = accountsDbAdapter.getAccountBalance(accountUID, -1, System.currentTimeMillis());
175184

176-
views.setTextViewText(R.id.transactions_summary,
177-
accountBalance.formattedString(Locale.getDefault()));
178-
int color = accountBalance.isNegative() ? R.color.debit_red : R.color.credit_green;
179-
views.setTextColor(R.id.transactions_summary, context.getResources().getColor(color));
185+
if (shouldDisplayBalance) {
186+
views.setTextViewText(R.id.transactions_summary,
187+
accountBalance.formattedString(Locale.getDefault()));
188+
int color = accountBalance.isNegative() ? R.color.debit_red : R.color.credit_green;
189+
views.setTextColor(R.id.transactions_summary, context.getResources().getColor(color));
190+
} else {
191+
views.setViewVisibility(R.id.transactions_summary, View.GONE);
192+
}
180193

181194

182195
Intent accountViewIntent = new Intent(context, TransactionsActivity.class);
@@ -219,11 +232,13 @@ public void run() {
219232
for (final int widgetId : appWidgetIds) {
220233
final String accountUID = defaultSharedPrefs
221234
.getString(UxArgument.SELECTED_ACCOUNT_UID + widgetId, null);
235+
final boolean shouldDisplayBalance = defaultSharedPrefs
236+
.getBoolean(UxArgument.SHOULD_DISPLAY_BALANCE + widgetId, true);
222237

223238
if (accountUID == null)
224239
continue;
225240

226-
updateWidget(context, widgetId, accountUID);
241+
updateWidget(context, widgetId, accountUID, shouldDisplayBalance);
227242
}
228243
}
229244
}).start();

app/src/main/res/layout/widget_configuration.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,12 @@
3535
android:layout_height="wrap_content"
3636
android:minHeight="?android:attr/listPreferredItemHeight" />
3737

38+
<CheckBox
39+
android:id="@+id/input_should_display_balance"
40+
android:layout_width="match_parent"
41+
android:layout_height="wrap_content"
42+
android:text="@string/label_should_display_balance"
43+
android:checked="true"/>
44+
3845
<include layout="@layout/default_buttons"/>
3946
</LinearLayout>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
<string name="label_permission_record_transaction">Record transactions in GnuCash</string>
8686
<string name="label_permission_create_account">Create accounts in GnuCash</string>
8787
<string name="label_display_account">Display account</string>
88+
<string name="label_should_display_balance">Display balance?</string>
8889
<string name="btn_create_accounts">Create Accounts</string>
8990
<string name="title_default_accounts">Select accounts to create</string>
9091
<string name="error_no_accounts">No accounts exist in GnuCash.\nCreate an account before adding a widget</string>

0 commit comments

Comments
 (0)