Skip to content

Commit

Permalink
Add static app shortcuts for adding transactions
Browse files Browse the repository at this point in the history
Note that the add.png file is originally from:
  https://github.com/googlesamples/android-AppShortcuts
  • Loading branch information
brarcher committed Sep 26, 2017
1 parent f66bdce commit 85e70fc
Show file tree
Hide file tree
Showing 7 changed files with 602 additions and 24 deletions.
444 changes: 444 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity
android:name=".BudgetActivity"
Expand Down
65 changes: 49 additions & 16 deletions app/src/main/java/protect/budgetwatch/TransactionViewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ public class TransactionViewActivity extends AppCompatActivity
private static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int PERMISSIONS_REQUEST_CAMERA = 2;

static final String ACTION_NEW_EXPENSE = "ActionAddExpense";
static final String ACTION_NEW_REVENUE = "ActionAddRevenue";

private String capturedUncommittedReceipt = null;
private DBHelper _db;

Expand Down Expand Up @@ -123,10 +126,40 @@ protected void onCreate(Bundle savedInstanceState)
_budgetSpinner = (Spinner) findViewById(R.id.budgetSpinner);

final Bundle b = getIntent().getExtras();
_transactionId = b.getInt("id");
_type = b.getInt("type");
_updateTransaction = b.getBoolean("update", false);
_viewTransaction = b.getBoolean("view", false);
String action = getIntent().getAction();
if(b != null)
{
_transactionId = b.getInt("id");
_type = b.getInt("type");
_updateTransaction = b.getBoolean("update", false);
_viewTransaction = b.getBoolean("view", false);
}
else if(action != null)
{
_updateTransaction = false;
_viewTransaction = false;

if(action.equals(ACTION_NEW_EXPENSE))
{
_type = DBHelper.TransactionDbIds.EXPENSE;
}
else if(action.equals(ACTION_NEW_REVENUE))
{
_type = DBHelper.TransactionDbIds.REVENUE;
}
else
{
Log.d(TAG, "Unsupported action '" + action + "', bailing");
finish();
return;
}
}
else
{
Log.d(TAG, "Launched TransactionViewActivity without arguments, bailing");
finish();
return;
}
}

@SuppressLint("DefaultLocale")
Expand Down Expand Up @@ -517,6 +550,18 @@ public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();

if(id == R.id.action_save)
{
doSave();
return true;
}

if(id == android.R.id.home)
{
finish();
return true;
}

final Bundle b = getIntent().getExtras();
final int transactionId = b.getInt("id");
final int type = b.getInt("type");
Expand Down Expand Up @@ -567,18 +612,6 @@ public void onClick(DialogInterface dialog, int which)
return true;
}

if(id == R.id.action_save)
{
doSave();
return true;
}

if(id == android.R.id.home)
{
finish();
return true;
}

return super.onOptionsItemSelected(item);
}

Expand Down
Binary file added app/src/main/res/drawable-nodpi/add.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,7 @@
<string name="searchHint">Search&#8230;</string>
<string name="searchEmptyExpenses">No matching expense transactions.</string>
<string name="searchEmptyRevenues">No matching revenue transactions.</string>

<string name="addExpenseDisabled">Adding an expense is disabled</string>
<string name="addRevenueDisabled">Adding a revenue is disabled</string>
</resources>
29 changes: 29 additions & 0 deletions app/src/main/res/xml/shortcuts.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="revenue"
android:enabled="true"
android:icon="@drawable/add"
android:shortcutShortLabel="@string/addRevenueTransactionTitle"
android:shortcutLongLabel="@string/addRevenueTransactionTitle"
android:shortcutDisabledMessage="@string/addRevenueDisabled">
<intent
android:action="ActionAddRevenue"
android:targetPackage="protect.budgetwatch"
android:targetClass="protect.budgetwatch.TransactionViewActivity" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
<shortcut
android:shortcutId="expense"
android:enabled="true"
android:icon="@drawable/add"
android:shortcutShortLabel="@string/addExpenseTransactionTitle"
android:shortcutLongLabel="@string/addExpenseTransactionTitle"
android:shortcutDisabledMessage="@string/addExpenseDisabled">
<intent
android:action="ActionAddExpense"
android:targetPackage="protect.budgetwatch"
android:targetClass="protect.budgetwatch.TransactionViewActivity" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,29 @@ private void checkAllFields(final Activity activity,
checkFieldProperties(activity, R.id.viewButton, View.VISIBLE, null);
}

private void addBudget(Activity activity, String budget)
{
DBHelper db = new DBHelper(activity);

if(budget != null)
{
boolean result = db.insertBudget(budget, 0);
assertTrue(result);
}
db.close();
}

private void addTransactionForBudget(Activity activity, String budget, String receipt)
{
DBHelper db = new DBHelper(activity);

boolean result = db.insertTransaction(DBHelper.TransactionDbIds.EXPENSE, "description",
"account", budget,
100.10, "note", nowMs, receipt);
assertTrue(result);
db.close();
}

private ActivityController setupActivity(final String budget, final String receipt,
boolean launchAsView, boolean launchAsUpdate)
{
Expand Down Expand Up @@ -355,22 +378,51 @@ private ActivityController setupActivity(final String budget, final String recei
.withIntent(intent).create();

Activity activity = (Activity)activityController.get();
DBHelper db = new DBHelper(activity);

if(budget != null)
{
boolean result = db.insertBudget(budget, 0);
assertTrue(result);
addBudget(activity, budget);

if (receipt != null)
{
result = db.insertTransaction(DBHelper.TransactionDbIds.EXPENSE, "description",
"account", budget,
100.10, "note", nowMs, receipt);
assertTrue(result);
addTransactionForBudget(activity, budget, receipt);
}
}

activityController.start();
activityController.visible();
activityController.resume();

return activityController;
}

private ActivityController setupActivity(final int actionType, final String budget, final String receipt)
{
Intent intent = new Intent();

if(actionType == DBHelper.TransactionDbIds.EXPENSE)
{
intent.setAction(TransactionViewActivity.ACTION_NEW_EXPENSE);
}
else
{
intent.setAction(TransactionViewActivity.ACTION_NEW_REVENUE);
}

ActivityController activityController = Robolectric.buildActivity(TransactionViewActivity.class)
.withIntent(intent).create();

Activity activity = (Activity)activityController.get();

if(budget != null)
{
addBudget(activity, budget);

if (receipt != null)
{
addTransactionForBudget(activity, budget, receipt);
}
}
db.close();

activityController.start();
activityController.visible();
Expand All @@ -387,6 +439,21 @@ public void startAsAddCheckFieldsAvailable()
Activity activity = (Activity)activityController.get();

checkAllFields(activity, "", "", "budget","", "", "", nowString, "", false, false);
DBHelper db = new DBHelper(activity);
DatabaseTestHelper.clearDatabase(db, activity);
db.close();

for(int type : new int[]{DBHelper.TransactionDbIds.EXPENSE, DBHelper.TransactionDbIds.REVENUE})
{
activityController = setupActivity(type, "budget", null);
activity = (Activity)activityController.get();
checkAllFields(activity, "", "", "budget","", "", "", nowString, "", false, false);

db = new DBHelper(activity);
DatabaseTestHelper.clearDatabase(db, activity);
db.close();
}

}

@Test
Expand Down

0 comments on commit 85e70fc

Please sign in to comment.