SI: Implement put operations

Description
This pull request implements basic PUT operations.

[x] PUT is supported with tests
[x] GET is supported with tests
[x] REMOVE is supported with tests

Forthcoming: Based on our internal design doc we need to restrict which local files may be PUT using uploadsBasePath. This will come in a follow-up PR.
The scope of PECO-397 was to implement PUT only. But I think we should include implementing GET in this PR so we can verify in the e2e test that the file we attempted to PUT was successfully captured on the server. Right now we're just checking for a 200 status code. Which is better than nothing but only means that the server said everything is okay. But maybe the server is wrong...
Update: I've now implemented GET in this pull request so we can verify that a PUT operation succeeded.

I've pushed in the uploadsBasePath restriction and associated tests. I have a few questions for the group though:

Should we allow uploads_base_path to be a list of allowed paths?
Do we need to require uploads_base_path for REMOVE operations?
Should we re-name uploads_base_path to allowed_local_dirs since it's technically restricting not only what data we PUT but what data we GET?
Right now we requireuploads_base_path be provide and be a path-like string. Do we need any other explicit constraints? For example we could prevent users from specifying the root directory '/' as their uploads_base_path. Is that desireable?

cc @moderakh @HSCandYH

thanks @susodapop my answers inline:

I've pushed in the uploadsBasePath restriction and associated tests. I have a few questions for the group though:

Should we allow uploads_base_path to be a list of allowed paths?

yes

Do we need to require uploads_base_path for REMOVE operations?

yes

Should we re-name uploads_base_path to allowed_local_dirs since it's technically restricting not only what data we PUT but what data we GET?

I thinks we should make this plural but allowed_local_dirs is not clear to what feature we are referring.
maybe uploads_base_paths ?

Right now we requireuploads_base_path be provide and be a path-like string. Do we need any other explicit constraints? For example we could prevent users from specifying the root directory '/' as their uploads_base_path. Is that desireable?

I don't think we can do that that requires knowledge of specific OS filesystem structure and home user path. We rely on the end user to configure that.

cc @moderakh @HSCandYH


Setup pre-commit for repo

To help lower barriers to contributing we should integrate pre-commit to the project. The main use for us would be to run the linter before a commit occurs to help prevent failed tests when PRs are opened. While this does change the setup time, it does conform to a larger python practice. That conformity should theoretically be more accessible when compared to knowing to run make styles before committing.

I don't use pre-commit much (we use custom hooks) but this definitely sounds like an excellent idea. django-debug-toolbar's make commands always give me a headache.

Yeah, perhaps larger python practice isn't the right phrase. Growing is more appropriate.


reuse: 2.1.0 -> 3.0.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/fsfe/reuse-tool/releases.
meta.description for reuse is: A tool for compliance with the REUSE Initiative recommendations
meta.homepage for reuse is: https://github.com/fsfe/reuse-tool
Updates performed

Version update

To inspect upstream changes
Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 3.0.0 with grep in /nix/store/ag0gd4d4vwpjk43cyfa85gklzx708h4m-python3.11-reuse-3.0.0
found 3.0.0 in filename of file in /nix/store/ag0gd4d4vwpjk43cyfa85gklzx708h4m-python3.11-reuse-3.0.0

Rebuild report (if merged into master) (click to expand)

5 total rebuild path(s)

5 package rebuild(s)

First fifty rebuilds by attrpath
amberol
python311Packages.reuse
python312Packages.reuse
reuse
sbomnix

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/ag0gd4d4vwpjk43cyfa85gklzx708h4m-python3.11-reuse-3.0.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A reuse https://github.com/r-ryantm/nixpkgs/archive/d61df4a53c907570c5efd1d8ddd19967058cfbc8.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/d61df4a53c907570c5efd1d8ddd19967058cfbc8#reuse

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/ag0gd4d4vwpjk43cyfa85gklzx708h4m-python3.11-reuse-3.0.0
ls -la /nix/store/ag0gd4d4vwpjk43cyfa85gklzx708h4m-python3.11-reuse-3.0.0/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

4 packages built:

amberol
reuse (python311Packages.reuse)
python312Packages.reuse
sbomnix

Maintainer pings
cc @FlorianFranzen @Luflosi for testing.

closing in favor of #281636


Add isspace

Now I'm curious what locale settings on Github CI is set.

This wasn't an issue of locale, but instead the formatting for UIntPtr was broken on .NET Framework: the behavior of string.Format("{0:x2}", (IntPtr)0x20) is different between net48 and net7.
I've fixed that with more portable code.
Good thing we have the integration tests :)


[feat] OS info as constants and not async functions

Describe the problem
Given a scarce support for the top-level await, I'd like to have, at the very least, the osType exposed as a constant in the JS API (and not an async function, as it is now).
Describe the solution you'd like
Add this
import { OS_TYPE } from '@tauri-apps/api/os';

and don't make me call this anymore:
import { type } from '@tauri-apps/api/os';
const osType = await type();

Alternatives considered
For other people struggling with it at the moment: use the following ugly, bad, breaking, etc hack on the client side: window.navigator.userAgent.includes("Macintosh;").
Additional context
Electron does it.
It can easily come as a non-breaking change (supplementary to the current async type, arch and such). No need to deprecate the other stuff for a long time, too.

We explicitly removed all variables from the API in v2 and stopped adding them to v1, because we got many many reports about issues with ssr-first frameworks (nextjs, nuxt, sveltekit, etc) because of variables (because they need access to the navigator or window variable).
I'm not ruling it out, just warning you that this is pretty unlikely as of now. As an idea for exploration, instead of using the typical ipc, using eval/init_scripts may work (with the caveats it has).

We can't break the API in v1 so I will just consider v2 for this issue.
we can't make them constants, as Fabian said, will need to access window or navigator variables and will make issues in SSR frameworks, but we can make these functions not async at least, you will also be able to directly access them using window.__TAURI_OS_PLUGIN_INTERNALS__.eol if you prefer but I wouldn't rely on these internals.


fix file upload error handling

This PR addresses the issue where Response::json is used to return any response for the iframe upload and being unable to parse the JSON response returned. This is done by using another technique to parse the iframe content into a JSON object. It also handles displaying errors to the client as well.

thanks @oohnoitz


Refactor test_while.py to use BoaTestConstructor

Summary or solution description
Refactored test_while file to use boatestconstructor in place of TestRunner for unit testing

Task linked: CU-86a1huqng Refactor test_while.py to use BoaTestConstructor

coverage: 92.1%. remained the same
when pulling ec75b9db1fe14f1b3dad9c6b8825b45146aaa46b on CU-86a1huqng
into 73b8da29a14f84a8dc2f1fa4990a1315e1ca16be on development.


Please Help Me

how can i generate code for similar like https://chill.aicirou.workers.dev/2:/
please help me because i want list view + thumbnail view please help me aircirou

There's is a toggle button, just below setting icon for switching between Grid view and List view.


Developer Mode

Cant find my uid in Dev.Mode
...../auth/ there is now events?api_key

See this issue with more details


updated to current version of activemq.  fixed source url

Description provided here:
https://tickets.opscode.com/browse/COOK-4569

I've update the cookbook to use the latest version of activemq on the apache site.


Update license to have true CC0 text

Coverage remained the same at 27.406% when pulling 313aa8ff37775103639b71eec2c0bf10245d160e on update_license into 562435734c78100af7efeda42386ea3b997a83c5 on develop.


It would be nice if these directions were actually directions

There is not much to follow here except for creating a function which is nice but..

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: c59024a4-9208-9b00-43ee-f6ba936c95a6
Version Independent ID: 5ac7705c-35e3-b211-ebba-3798dd949409
Content: Work with proxies in Azure Functions
Content Source: articles/azure-functions/functions-proxies.md
Service: azure-functions
GitHub Login: @alexkarcher-msft
Microsoft Alias: alkarche

Hi @xtianus79 Could you provide the specific section in the documentation that your feedback is applicable to ?

@xtianus79 Since we have not heard back from you we will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


How to review a multisig proposal using eosjs?

There are 8 subcommands under "cleos multisig", but only 5 actions for eosio.msig where "review" is missing. Now I wonder how can I get the information of a multisig proposal via eosjs?

I have the same question~ When i get a multisig proposal via eosjs, it's in packed binary format. How can i unpack it?

Documentation for this is in progress in #588


bug: Next button bug in Daily code slides website.

Description
Website link: (https://projects.100xdevs.com/tracks/promises-async-await/Promises-and-async--await-1)
When clicked on the next slide, sometimes it is heading to the 3rd one. And happened a couple of times.
To Reproduce
(I did not understand exactly what to mention in here)
Expected behavior
When the next button is clicked, it should head to the next slide, not the third slide respectively.
Screenshots or GIFs

Info (please complete the following information):

Browser - Chrome
Version 127.0.6533.120

Additional context
Add any other context about the problem here.

it works proper !!

Works fine locally

Doesn't seem like a issue to me. Closing


remember cursor position

Saving the cursor position in the file and restoring it when the file is reopened.
Thanks for the great editor. A minimum of settings is good. Convenient interface.

Hi @sergDash, that feature is already implemented. The file content, scroll position and cursor position are stored in cache.

Hi @massivemadness! After reopening the file, everything is reset for me.
And I also want to reload the file changed from the outside.

If you close a certain tab, the app will clear the file cache and this is unlikely to change in the future. As for reloading the file, that's an interesting idea and I'll probably implement it in future versions. Thanks for feedback!


Add a hard-coded SkyBox to the scene

You might want to look at the new samples Chaoticbob added recently (26_push_descriptors by ex). It simplified quite a bit the descriptor handling bits, maybe it would be useful to you vs the old pattern?

Thanks for this update. I added the hard-coded skybox using the new pattern which mainly allows push descriptors for uniforms (on Vulkan and DX). Ready for review.

Ready for review!

Ready for review.

Ready for review.

Ready for review.

Thanks for this update. I added the hard-coded skybox using the new pattern which mainly allows push descriptors for uniforms (on Vulkan and DX). Ready for review.

Seems like the migration to push constant/descriptor was half-way there. Suggestions should make it work, removing the need for a pool.

I updated the code to push descriptors for sampled images and samplers. Thank you @Keenuts. Ready for review!


[WIP] GitHub OIDC publishing

Changes
By using OIDC publishing, we can remove unnecessary secrets from our repository, reducing risk of secrets being leaked as well as minimizing work needed to rotate them.
This PR also adds a test release action that releases this project to the test PyPI index at test.pypi.org.
Separately, I've configured the test PyPI index for this package to allow OIDC with the release-test environment. After confirming, I'll do the same with the prod PyPI index with the release environment.
Tests
Can't test from this PR. Once merged, I'll run the test workflow and make a second PR with any bugfixes & the updated release workflow.

Codecov Report
Attention: 1575 lines in your changes are missing coverage. Please review.

Files
Coverage Δ

databricks/sdk/azure.py
100.00% <100.00%> (ø)

databricks/sdk/mixins/files.py
74.52% <100.00%> (+0.26%)
:arrow_up:

databricks/sdk/retries.py
100.00% <100.00%> (ø)

databricks/sdk/service/catalog.py
50.23% <ø> (-2.84%)
:arrow_down:

databricks/sdk/service/compute.py
50.92% <ø> (-2.93%)
:arrow_down:

databricks/sdk/service/iam.py
41.85% <ø> (-6.36%)
:arrow_down:

databricks/sdk/service/ml.py
47.36% <ø> (-2.47%)
:arrow_down:

databricks/sdk/service/sql.py
52.75% <ø> (-3.27%)
:arrow_down:

databricks/sdk/version.py
100.00% <100.00%> (ø)

databricks/sdk/__init__.py
74.21% <90.90%> (+0.88%)
:arrow_up:

... and 13 more

... and 2 files with indirect coverage changes
:loudspeaker: Thoughts on this report? Let us know!.


Run test suite in parallel via xdist

Locally I got 5x speedup via using -n=auto from pytest-xdist

Added docs for local development. It should be enough for now. xdist is working, but doesn’t produce correct coverage


Dockerise services on AWS VM

Dokerise spring, tomcat, etc...

Dockerisation was too time consuming to implement


Feature/cougar cash

This change is

Review status: 0 of 38 files reviewed at latest revision, 9 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 19 at r1 (raw file):

import edu.byu.support.payment.PaymentType;

public class AddFundsActivity extends ByuActivity implements View.OnClickListener {

implements view.onClickListener is used because I have 4 buttons that behave the exact same way, V1 used the same method

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 101 at r1 (raw file):

		@Override
		protected char[] getAcceptedChars() {
			return new char[] {'0','1','2','3','4','5','6','7','8','9'};

consider setting this up so that pressing "enter" will do the same thing as "submit"

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CompleteTransferActivity.java, line 46 at r1 (raw file):

		paymentType = getIntent().getParcelableExtra("paymentType");
		transferAmount = getIntent().getDoubleExtra("transferAmount", 0);

PSF

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 65 at r1 (raw file):

							.setMessage("You have no payment types associated with your account. Would you like to add a payment type to your account?")
							.setPositiveButton("Yes", (dialogInterface, i) -> {
								// todo: test an account with no payment types

Resolve

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r1 (raw file):

	}

	public class PaymentTypeAdapter extends ByuRecyclerAdapter<PaymentType> {

private

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 19 at r1 (raw file):

public class TransactionWrapper {
	/**
	 * transactions : [{"transaction_date":"2012-12-06T14:11:07-07:00","transaction_description":"Printing - HBLL","transaction_amount":-0.56},{"transaction_date":"2012-12-06T14:11:06-07:00","transaction_description":"Printing - HBLL","transaction_amount":-0.07},{"transaction_date":"2012-12-06T14:11:04-07:00","transaction_description":"Printing - HBLL","transaction_amount":-0.49},{"transaction_date":"2012-12-06T14:11:03-07:00","transaction_description":"Printing - HBLL","transaction_amount":-0.07},{"transaction_date":"2012-12-06T11:19:52-07:00","transaction_description":"Online Deposit","transaction_amount":5}]

Remove

app/src/main/res/layout/cougar_cash_activity_main.xml, line 68 at r1 (raw file):

        <!--android:layout_marginStart="8dp"-->
        <!--android:layout_marginBottom="4dp"-->
        <!--/>-->

Remove

support/src/main/java/edu/byu/support/login/internal/authenticator/providers/ByuAccountAuthenticator.java, line 131 at r1 (raw file):

					cred = ((Wso2Client.Api) ByuApiGenerator.createApi(context, new Wso2Client()))
							// Add client credentials here to use your own wso2 app. Use getWso2AuthSandbox to hit a sandbox endpoint.
							.getWso2AuthSandbox(new Wso2Client.AccountWrapper(account.name, accountManager.getPassword(account), null, null))

switch to production

support/src/main/java/edu/byu/support/retrofit/ByuApiGenerator.java, line 96 at r1 (raw file):

	private static String getPublicBearerTokenAuthHeader(Context context) throws IOException {
		return buildBearerTokenAuthentication(((Wso2Client.Api) ByuApiGenerator.createApi(context, new Wso2Client())).getWso2AuthSandbox().execute().body());

see above comment

Comments from Reviewable

Review status: 0 of 38 files reviewed at latest revision, 8 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CompleteTransferActivity.java, line 46 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
PSF

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 65 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Resolve

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 19 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Remove

Done.

app/src/main/res/layout/cougar_cash_activity_main.xml, line 68 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Remove

Done.

Comments from Reviewable

Reviewed 34 of 40 files at r1, 6 of 6 files at r2.
Review status: all files reviewed at latest revision, 50 unresolved discussions.

a discussion (no related file):
Let's rename the activities. Let's go CougarCashMainActivity, PaymentMethodActivity, PaymentAmountActivity, PaymentReviewActivity

a discussion (no related file):
My app crashes whenever I go to PaymentMethodActivity. I'm logged in as prtlusr

app/src/main/AndroidManifest.xml, line 326 at r2 (raw file):

			<meta-data
				android:name="featureId"
				android:value="cougarcash" />

cougarCash is what we have on iOS

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 19 at r1 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
implements view.onClickListener is used because I have 4 buttons that behave the exact same way, V1 used the same method

If we have four buttons that behave the same way, we should create a private inner class called ButtonClickListener, and set it to those four buttons. V1 did this a lot, and it turned out very confusing to the developers.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 1 at r2 (raw file):

package edu.byu.suite.features.cougarCash.controller;

I think you might be missing some functionality (the detail text beneath the amount). See me if you have questions. You can see it in iOS

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 50 at r2 (raw file):

		submitButton = (Button) findViewById(R.id.btn_submit);
		submitButton.setEnabled(false);
		findViewById(R.id.btn_submit).setOnClickListener(view -> {

Why are you finding it again? Why not just use submitButton.setOnClickListener....?

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 59 at r2 (raw file):

	private void setFormattedText(TextView textView, String text)
	{

CMD OPT L

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 64 at r2 (raw file):

		final int length = text == null ? 0 : text.length();
		switch (length)
		{

CMD OPT L

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 66 at r2 (raw file):

		{
			case 0:
				textView.setText("$0.00");

There's some warnings here. We should probably do what Android Studio wants :p

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 76 at r2 (raw file):

			default:
				final StringBuilder builder = new StringBuilder("$" + text);
				builder.insert(length-1, ".");

length - 1 ? Is that correct? Is it not length - 2? I always get these ones mixed up...

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 84 at r2 (raw file):

		transferAmount = Double.valueOf(textView.getText().subSequence(1, textView.getText().length()).toString());

		if (Double.valueOf(textView.getText().toString().substring(1)) >= 5) {

This is duplicated above. Would this not be the same as if (transferAmount >= 5) {...

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 94 at r2 (raw file):

	public void onClick(View view) {
		final TextView textView = (TextView) view;
		editText.setText(textView.getTag() + "00");

What is this doing? Why are we using the tag?

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CompleteTransferActivity.java, line 40 at r2 (raw file):

		super.onCreate(savedInstanceState);
		setContentView(R.layout.cougar_cash_activity_complete_transfer);
		((TextView) findViewById(R.id.makePaymentHeader).findViewById(R.id.textView)).setText("Make Payment:");

Warnings

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CompleteTransferActivity.java, line 102 at r2 (raw file):

							.show();
				} else {
					if (!retried) {

Comment here

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CompleteTransferActivity.java, line 120 at r2 (raw file):

		}

		((TextView) findViewById(R.id.transferAmountTotalText)).setText(NumberFormat.getCurrencyInstance().format(transferAmount));

Put comments in here dividing up each section (for instance, on this line you could put "Set up the total fees section"

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 39 at r2 (raw file):

	private static final int LOADING = 0;
	private static final int NOT_LOADING = 1;
	private int pageNumber;

Let's initialize this to 0 here instead of in onCreate

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 52 at r2 (raw file):

		setContentView(R.layout.cougar_cash_activity_main);
		addFundsButton = (Button) findViewById(R.id.addFundsButon);
		addFundsButton.setEnabled(false);

Can we set these buttons to disabled in the xml?

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 58 at r2 (raw file):

		ByuRecyclerView recyclerView = (ByuRecyclerView) findViewById(R.id.transactionRecyclerView);
		adapter = new TransactionAdapter(new ArrayList());

pass in null instead of a new array list

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 140 at r2 (raw file):

	}

	private void reportCardLost() {

This and the function below seem VERY similar. I believe we should be able to combine them and just pass in a boolean variable called "lost". Something like
private void changeCardStatus(boolean lost) {
	CougarCashClient.Api api = ByuApiGenerator.<CougarCashClient, CougarCashClient.Api>createApi(this, new CougarCashClient());
	Call<ResponseBody> call = lost ? api.reportCardLost() : api.reportCardFound();
	final String alertTitle = "Report Card " + (lost ? "Lost" : "Found") + "Successful";
	final String alertMessage = "You card has now been " + (lost ? "marked as lost. We hope it is found soon!" : "reactivated");
	enqueueCall(call, new ByuCallback<ResponseBody>(this) {
		@Override
		public void onSuccess(Call<ResponseBody> call, Response<ResponseBody> response) {
			new AlertDialog.Builder(CougarCashMainActivity.this)
					.setTitle(alertTitle)
					.setMessage(alertMessage)
					.setPositiveButton("OK", null)
					.show();
			cardLost = lost;
			updateButtonUi();
		}
		@Override
		public void onFailure(Call<ResponseBody> call, ByuError byuError) {
			showErrorDialog(byuError.getReadableMessage());
		}
	});
}

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 189 at r2 (raw file):

	private void updateButtonUi() {
		if (cardLost) {

use ternary here

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 196 at r2 (raw file):

	}

	private void loadMore() {

I think we should be able to combine this with the initial loadTransactions function... let me know if you're having any troubles with it

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 235 at r2 (raw file):

		private class TransactionViewHolder extends ByuViewHolder<TransactionWrapper.Transaction> {
			TextView transactionDescription;

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 239 at r2 (raw file):

			TextView transactionTotal;

			public TransactionViewHolder(View itemView) {

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 261 at r2 (raw file):

		private class LoadingViewHolder extends ByuViewHolder<TransactionWrapper.Transaction> {
			public LoadingViewHolder(ViewGroup parent) {

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 43 at r2 (raw file):

		final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.paymentTypeRecyclerView);
		adapter = new PaymentTypeAdapter(new ArrayList<>());

Initialize this above (where it's declared) and pass in null

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r2 (raw file):

	private class PaymentTypeAdapter extends ByuRecyclerAdapter<PaymentType> {
		PaymentTypeAdapter(List<PaymentType> paymentTypes) {

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 100 at r2 (raw file):

		}

		class PaymentTypeViewHolder extends ByuViewHolder<PaymentType> {

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 101 at r2 (raw file):

		class PaymentTypeViewHolder extends ByuViewHolder<PaymentType> {
			final ImageView accountTypeImage;

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 106 at r2 (raw file):

			final TextView accountNumberText;

			PaymentTypeViewHolder(View itemView) {

private

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 117 at r2 (raw file):

			public void bind(PaymentType data, ByuClickListener<PaymentType> listener) {
				if (data.getNickname() == null) {
					data.setNickname("");

We normally don't want to set the model variables.... Is there a good reason for this?
If there's not, we should do accountNicknameText.setText(data.getNickname() == null ? data.getNickname() : ""); or something like that

app/src/main/java/edu/byu/suite/features/cougarCash/model/IsCardLostResponse.java, line 6 at r2 (raw file):

 * Created by poolguy on 12/22/16
 */
public class IsCardLostResponse {

Let's name this CardStatus

app/src/main/java/edu/byu/suite/features/cougarCash/model/LegaleesWrapper.java, line 38 at r2 (raw file):

		}

		public void setHeader(String header) {

Remove unneeded setters

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 55 at r2 (raw file):

		public String getFormattedTransactionDate() {
			SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);

let's make the date formats psf

app/src/main/java/edu/byu/suite/features/cougarCash/service/CougarCashClient.java, line 34 at r2 (raw file):

	@Override
	public String getBaseUrl() {
		return "https://api.byu.edu:443/domains/cougar-cash/v1.1/";

Remove :443

app/src/main/java/edu/byu/suite/features/cougarCash/service/CougarCashClient.java, line 67 at r2 (raw file):

		@GET("card")
		@Headers("Accept: application/json")
		Call<IsCardLostResponse> isCardLost();

rename getCardStatus

app/src/main/res/drawable/cougar_cash_lost_card_button.xml, line 1 at r2 (raw file):

<?xml version="1.0" encoding="utf-8"?>

Could this technically be merged with the other one? They should be the exact same except for color and text...

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 21 at r2 (raw file):

			android:digits="0123456789."
			android:gravity="center"
			android:hint="$0.00"

Instead of a hint, let's just start the text out with $0.00

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 36 at r2 (raw file):

			android:gravity="center"
			android:padding="4dp"
			android:text="$0.00"

Wait... What is this? Do we have an textview on top of the edit text? HAHAHA. Let's see if we can do this without the duplicate

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 49 at r2 (raw file):

			android:layout_centerHorizontal="true"
			android:layout_marginStart="8dp"
			android:text="Minimum deposit amount: $5.00"

This should be responsive to display fees. Is it?

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 106 at r2 (raw file):

		</LinearLayout>

		<Button

Did we attach the "GO" button on the keyboard as well?

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 113 at r2 (raw file):

			android:layout_alignParentStart="true"
			android:layout_below="@id/linearLayout"
			android:text="Submit"

Instead of "Submit", we want this to indicate that they will be able to review their order... Maybe "Next" or "Continue" or "Preview Order". Also, I'm on the fence about putting in the top right corner like on iOS. What are your thoughts?

app/src/main/res/layout/cougar_cash_activity_complete_transfer.xml, line 130 at r2 (raw file):

					layout="@layout/default_list_item_header" />

				<LinearLayout

Is there anyway to include the same layout that we use in the recycler views here?

app/src/main/res/layout/cougar_cash_activity_complete_transfer.xml, line 175 at r2 (raw file):

					layout="@layout/default_list_item_header" />

				<TextView

Instead of separating these all into separate views, it might be easier to use attributed strings and just have it be one view. Talk to me or Corey about this if you have questions

app/src/main/res/layout/cougar_cash_activity_main.xml, line 20 at r2 (raw file):

        android:gravity="center_horizontal"
        android:textSize="70sp"
		android:layout_marginTop="-8dp"

CMD OPT L

app/src/main/res/layout/cougar_cash_activity_payment_method.xml, line 14 at r2 (raw file):

        layout="@layout/toolbar"/>

    <LinearLayout

Instead of putting these both in a linear layout, what about using a ViewSwitcher? I know Corey has used that for empty tables a lot

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):

        android:layout_height="wrap_content"
        android:layout_below="@+id/transactionDescriptionText"
        android:text="10/8/2015"

Let's remove this test text from all the views. Also, I think decreasing the size of the date would be better. Thoughts?

Comments from Reviewable

Review status: all files reviewed at latest revision, 51 unresolved discussions.

a discussion (no related file):
Also, you remember the retry stuff that we were handling with the finishPayment. We have the same issue with startPayment

Comments from Reviewable

Review status: 32 of 38 files reviewed at latest revision, 51 unresolved discussions.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
Let's rename the activities. Let's go CougarCashMainActivity, PaymentMethodActivity, PaymentAmountActivity, PaymentReviewActivity

Done.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
My app crashes whenever I go to PaymentMethodActivity. I'm logged in as prtlusr

It shouldn't be doing that anymore

app/src/main/AndroidManifest.xml, line 326 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
cougarCash is what we have on iOS

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 1 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
I think you might be missing some functionality (the detail text beneath the amount). See me if you have questions. You can see it in iOS

The only thing that is different between mine and IOS is I don't have a header that says "ENTER AN AMOUNT" above the amount. Would you like me to add that?

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 50 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Why are you finding it again? Why not just use submitButton.setOnClickListener....?

No reason. Fixed.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 59 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
CMD OPT L

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 64 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
CMD OPT L

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 76 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
length - 1 ? Is that correct? Is it not length - 2? I always get these ones mixed up...

This logic was copied from v1. It seems to work fine.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/AddFundsActivity.java, line 94 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
What is this doing? Why are we using the tag?

Each button has a tag associated with it which contains the value represented. ie: the "$5" button has a tag with the value 5 associated with it, "$10" has a tag of 10, etc. This is the logic from v1. It avoids using button.getText and then removing the "$" sign from the string in order to save the value

Comments from Reviewable

Review status: 32 of 38 files reviewed at latest revision, 51 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 19 at r1 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
If we have four buttons that behave the same way, we should create a private inner class called ButtonClickListener, and set it to those four buttons.

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 66 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
There's some warnings here. We should probably do what Android Studio wants :p

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 84 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
This is duplicated above. Would this not be the same as if (transferAmount >= 5) {...

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 43 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Initialize this above (where it's declared) and pass in null

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 100 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 101 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 106 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 117 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
We normally don't want to set the model variables.... Is there a good reason for this?
If there's not, we should do accountNicknameText.setText(data.getNickname() == null ? data.getNickname() : ""); or something like that

Yes because some payment types do not have nicknames (one of mine, for instance), and the app will crash if we try to set the text of a textView with a null value.
Done.

Comments from Reviewable

Review status: 32 of 39 files reviewed at latest revision, 51 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 40 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Warnings

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 102 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Comment here

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 120 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Put comments in here dividing up each section (for instance, on this line you could put "Set up the total fees section"

Done.

Comments from Reviewable

Review status: 32 of 39 files reviewed at latest revision, 51 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 39 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Let's initialize this to 0 here instead of in onCreate

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 52 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Can we set these buttons to disabled in the xml?

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 58 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
pass in null instead of a new array list

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 189 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
use ternary here

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 235 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 239 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 261 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
private

Done.

Comments from Reviewable

Review status: 30 of 39 files reviewed at latest revision, 51 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/model/IsCardLostResponse.java, line 6 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Let's name this CardStatus

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/LegaleesWrapper.java, line 38 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Remove unneeded setters

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 55 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
let's make the date formats psf

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/service/CougarCashClient.java, line 34 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Remove :443

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/service/CougarCashClient.java, line 67 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
rename getCardStatus

Done.

Comments from Reviewable

Reviewed 1 of 16 files at r3.
Review status: 27 of 39 files reviewed at latest revision, 49 unresolved discussions.

a discussion (no related file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

Rename xml files as well

Comments from Reviewable

Reviewed 12 of 16 files at r3.
Review status: 36 of 39 files reviewed at latest revision, 24 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 1 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
The only thing that is different between mine and IOS is I don't have a header that says "ENTER AN AMOUNT" above the amount. Would you like me to add that?

No sorry. I meant that the detail text should change based on the user's input

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 84 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

Also, do you prefer subSequence, or substring. I'm fine with either. I might prefer the .toString().substring(1)...

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 94 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Each button has a tag associated with it which contains the value represented. ie: the "$5" button has a tag with the value 5 associated with it, "$10" has a tag of 10, etc. This is the logic from v1. It avoids using button.getText and then removing the "$" sign from the string in order to save the value

Awesome. Sounds good. Put a comment explaining that :)

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

Huh? I meant to make the constructor private... not to make the class public

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):

				if (data.getAccountType().equals(AccountType.BANK_ACCOUNT)) {
					accountTypeImage.setImageResource(R.drawable.icon_bank);
					accountNumberText.setText(data.getMungedAccountNum());

Why does one use the formattedMungedAccountNum() and the other one uses mungedAccountNum()?

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 21 at r3 (raw file):

	private List<Transaction> transactions;

	private static final SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);

let's name these date formats better. Something like "serviceDateFormat" and "displayDateFormat" or whatever you think differentiates them best

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 58 at r3 (raw file):

		public String getFormattedTransactionDate() {
			String formattedTransactionDate;

I don't think you need to save this outside of the try...

Comments from Reviewable

Review status: 35 of 39 files reviewed at latest revision, 24 unresolved discussions.

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 21 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of a hint, let's just start the text out with $0.00

Done. Removed completely.

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 36 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Wait... What is this? Do we have an textview on top of the edit text? HAHAHA. Let's see if we can do this without the duplicate

Done.

Comments from Reviewable

Reviewed 3 of 16 files at r3, 2 of 2 files at r4.
Review status: all files reviewed at latest revision, 21 unresolved discussions.

Comments from Reviewable

Review status: 35 of 39 files reviewed at latest revision, 21 unresolved discussions, all commit checks successful.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 1 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
No sorry. I meant that the detail text should change based on the user's input

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 84 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Also, do you prefer subSequence, or substring. I'm fine with either. I might prefer the .toString().substring(1)...

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 94 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Awesome. Sounds good. Put a comment explaining that :)

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 82 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Huh? I meant to make the constructor private... not to make the class public

Ahhh i see now. Done.

Comments from Reviewable

Review status: 35 of 39 files reviewed at latest revision, 21 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Why does one use the formattedMungedAccountNum() and the other one uses mungedAccountNum()?

Because for credit cards we want (**** **** **** 1234)
and with bank accounts we want (******1234)

Comments from Reviewable

Review status: 35 of 39 files reviewed at latest revision, 21 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 21 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
let's name these date formats better. Something like "serviceDateFormat" and "displayDateFormat" or whatever you think differentiates them best

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 58 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
I don't think you need to save this outside of the try...

Done.

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 49 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
This should be responsive to display fees. Is it?

Done.

app/src/main/res/layout/cougar_cash_activity_add_funds.xml, line 113 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of "Submit", we want this to indicate that they will be able to review their order... Maybe "Next" or "Continue" or "Preview Order". Also, I'm on the fence about putting in the top right corner like on iOS. What are your thoughts?

I like "Preview Order" the best (maybe "Preview Transfer"?) and I like it as a button here. But I could change it if you would like me to

Comments from Reviewable

Review status: 34 of 39 files reviewed at latest revision, 21 unresolved discussions.

app/src/main/res/layout/cougar_cash_activity_main.xml, line 20 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
CMD OPT L

Done.

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Let's remove this test text from all the views. Also, I think decreasing the size of the date would be better. Thoughts?

Done.

Comments from Reviewable

Review status: 31 of 39 files reviewed at latest revision, 20 unresolved discussions.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
Rename xml files as well

Done.

app/src/main/res/layout/cougar_cash_activity_payment_review.xml, line 175 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of separating these all into separate views, it might be easier to use attributed strings and just have it be one view. Talk to me or Corey about this if you have questions

Done.

app/src/main/res/layout/cougar_cash_activity_complete_transfer.xml, line 130 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Is there anyway to include the same layout that we use in the recycler views here?

I'm already doing that

Comments from Reviewable

Reviewed 2 of 18 files at r3, 4 of 6 files at r5, 7 of 7 files at r6.
Review status: all files reviewed at latest revision, 20 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 96 at r6 (raw file):

		fee = (transferAmount * paymentType.getFeePercent() < paymentType.getMinFee() ? paymentType.getMinFee() : transferAmount * paymentType.getFeePercent());

		if (transferAmount >= 5) {

I don't think this is logic you are looking for. I think you want to do this if the transferAmount >= the minumum deposit amount. It just so happens that $5.00 is the amount for all the test cards. Ask me if you have questions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 98 at r6 (raw file):

		if (transferAmount >= 5) {
			submitButton.setEnabled(true);
			String concatHolder = "* Required fee is approximately: " + NumberFormat.getCurrencyInstance(Locale.US).format(fee);

Let's put this string into the R.string.____ with a format. Something like
<string>* Required fee is approximately %d</string>

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Because for credit cards we want (**** **** **** 1234)
and with bank accounts we want (******1234)

Gotcha. Then I think that the data.getFormattedMungedAccountNum() should do both. Meaning the code would look something like this:
public void bind(PaymentType data, ByuClickListener<PaymentType> listener) {
    accountTypeImage.setImageResource(data.getAccountType == AccountType.BANK_ACCOUNT ? R.drawable.icon_bank : R.drawable.icon_credit_card);
    accountNumberText.setText(data.getFormattedMungedAccountNum());
}

...
...
...

private String getFormattedMungedAccountNum() {
    if (this.accountType == AccountType.BANK_ACCOUNT) {
        return ______;
    } else {
        return ______;
    }
}

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 114 at r6 (raw file):

			@Override
			public void bind(PaymentType data, ByuClickListener<PaymentType> listener) {
				if (data.getAccountType().equals(AccountType.BANK_ACCOUNT)) {

Don't need .equals with enums. Just use ==

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 131 at r6 (raw file):

		((TextView) findViewById(R.id.termsConditionsTitleText)).setText(legalees.getHeader());

		StringBuilder stringBuilder = new StringBuilder();

All of this logic can probably go into the Legalees object. something like getFormattedLegalText() See if that's possible. Or maybe on the object that holds the Legalees

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 58 at r3 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

Sorry, I meant that you can inline the variable altogether
try {
    Date date = SERVICE_DATE_FORMAT.parse(transactionDate);
    return DISPLAY_DATE_FORMAT.format(date);
}

app/src/main/res/layout/cougar_cash_activity_main.xml, line 21 at r6 (raw file):

		android:layout_marginTop="-8dp"
		android:background="@color/colorPrimary"
		android:elevation="4dp"

Android studio says this will have issues before v21. Have you tested that?

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 49 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

The minimum deposit amount is not always $5.00 if I remember correctly. It changes based on the payment type

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 113 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
I like "Preview Order" the best (maybe "Preview Transfer"?) and I like it as a button here. But I could change it if you would like me to

Sounds good. Let's decrease the padding between the review button and the 4 buttons by 1 or 2 dp. Show me the result

app/src/main/res/layout/cougar_cash_activity_payment_review.xml, line 130 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
I'm already doing that

Talk to me about this one

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

Text size thoughts?

app/src/main/res/values/strings.xml, line 254 at r6 (raw file):

	<string name="with_account_header">With Account:</string>
	<string name="terms_and_conditions_header"><![CDATA[Terms & Conditions:]]></string>
	<string name="minimum_deposit_message">Minimum deposit amount: $5.00</string>

This should be a formatted string (see other comments)

Comments from Reviewable

Review status: all files reviewed at latest revision, 20 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 98 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Let's put this string into the R.string.____ with a format. Something like
<string>* Required fee is approximately %d</string>

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Gotcha. Then I think that the data.getFormattedMungedAccountNum() should do both. Meaning the code would look something like this:
public void bind(PaymentType data, ByuClickListener<PaymentType> listener) {
    accountTypeImage.setImageResource(data.getAccountType == AccountType.BANK_ACCOUNT ? R.drawable.icon_bank : R.drawable.icon_credit_card);
    accountNumberText.setText(data.getFormattedMungedAccountNum());
}

...
...
...

private String getFormattedMungedAccountNum() {
    if (this.accountType == AccountType.BANK_ACCOUNT) {
        return ______;
    } else {
        return ______;
    }
}

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 114 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Don't need .equals with enums. Just use ==

Done.

Comments from Reviewable

Reviewed 1 of 45 files at r1, 1 of 18 files at r3, 4 of 4 files at r7.
Review status: all files reviewed at latest revision, 19 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 98 at r6 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

It doesn't look like you used the formatting...

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Done.

You shouldn't need the if/else anymore. See my two lines of code above

app/src/main/res/values/strings.xml, line 254 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
This should be a formatted string (see other comments)

Add the formatting

Comments from Reviewable

Review status: all files reviewed at latest revision, 19 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 96 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
I don't think this is logic you are looking for. I think you want to do this if the transferAmount >= the minumum deposit amount. It just so happens that $5.00 is the amount for all the test cards. Ask me if you have questions.

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 98 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
It doesn't look like you used the formatting...

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentMethodActivity.java, line 116 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
You shouldn't need the if/else anymore. See my two lines of code above

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 131 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
All of this logic can probably go into the Legalees object. something like getFormattedLegalText() See if that's possible. Or maybe on the object that holds the Legalees

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/TransactionWrapper.java, line 58 at r3 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Sorry, I meant that you can inline the variable altogether
try {
    Date date = SERVICE_DATE_FORMAT.parse(transactionDate);
    return DISPLAY_DATE_FORMAT.format(date);
}

Ohhhh haha right. Done.

app/src/main/res/layout/cougar_cash_activity_main.xml, line 21 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Android studio says this will have issues before v21. Have you tested that?

Well, it won't have issues. It just won't do anything on devices before v21. Which is fine because the only reason we added the elevation to the view was so that it would be flush with the elevation of the toolbar.

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 49 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
The minimum deposit amount is not always $5.00 if I remember correctly. It changes based on the payment type

Done.

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Text size thoughts?

Oh yes, I think the 15sp looks better than the 18sp

app/src/main/res/values/strings.xml, line 254 at r6 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Add the formatting

Done.

Comments from Reviewable

Reviewed 2 of 18 files at r3, 6 of 6 files at r8.
Review status: all files reviewed at latest revision, 13 unresolved discussions.

app/src/main/res/layout/cougar_cash_activity_main.xml, line 21 at r6 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Well, it won't have issues. It just won't do anything on devices before v21. Which is fine because the only reason we added the elevation to the view was so that it would be flush with the elevation of the toolbar.

Haha- that's right :p

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 53 at r8 (raw file):

			android:layout_centerHorizontal="true"
			android:layout_marginStart="8dp"
			android:text="@string/minimum_deposit_message"

Now that this has a format, you probably don't want to set the text here anymore

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Oh yes, I think the 15sp looks better than the 18sp

What is the default? Would there be any reason to leave it at the default?

Comments from Reviewable

Review status: all files reviewed at latest revision, 12 unresolved discussions.

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 106 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Did we attach the "GO" button on the keyboard as well?

Done.

Comments from Reviewable

Review status: 35 of 39 files reviewed at latest revision, 12 unresolved discussions.

app/src/main/res/layout/cougar_cash_activity_payment_amount.xml, line 53 at r8 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Now that this has a format, you probably don't want to set the text here anymore

Done.

app/src/main/res/layout/cougar_cash_activity_payment_method.xml, line 14 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of putting these both in a linear layout, what about using a ViewSwitcher? I know Corey has used that for empty tables a lot

I actually wasn't even using the textView. I forgot to fix this, but I instead decided to do what IOS does and just display a dialog when they don't have any payment types

app/src/main/res/layout/cougar_cash_list_item_transaction.xml, line 27 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
What is the default? Would there be any reason to leave it at the default?

Default is 14sp which also looks fine

Comments from Reviewable

Reviewed 1 of 18 files at r3, 1 of 7 files at r6, 4 of 4 files at r9.
Review status: all files reviewed at latest revision, 7 unresolved discussions.

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

app/src/main/res/drawable/cougar_cash_lost_card_button.xml, line 1 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
Change color programmatically

:) Do it

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 140 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
This and the function below seem VERY similar. I believe we should be able to combine them and just pass in a boolean variable called "lost". Something like
private void changeCardStatus(boolean lost) {
	CougarCashClient.Api api = ByuApiGenerator.<CougarCashClient, CougarCashClient.Api>createApi(this, new CougarCashClient());
	Call<ResponseBody> call = lost ? api.reportCardLost() : api.reportCardFound();
	final String alertTitle = "Report Card " + (lost ? "Lost" : "Found") + "Successful";
	final String alertMessage = "You card has now been " + (lost ? "marked as lost. We hope it is found soon!" : "reactivated");
	enqueueCall(call, new ByuCallback<ResponseBody>(this) {
		@Override
		public void onSuccess(Call<ResponseBody> call, Response<ResponseBody> response) {
			new AlertDialog.Builder(CougarCashMainActivity.this)
					.setTitle(alertTitle)
					.setMessage(alertMessage)
					.setPositiveButton("OK", null)
					.show();
			cardLost = lost;
			updateButtonUi();
		}
		@Override
		public void onFailure(Call<ResponseBody> call, ByuError byuError) {
			showErrorDialog(byuError.getReadableMessage());
		}
	});
}

Done.

app/src/main/res/drawable/cougar_cash_lost_card_button.xml, line 1 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
:) Do it

It changes the shape of the button when I try to set the color programmatically. It does not look as good. The real problem that we're having is getting it to work across all api levels. For below v21 we set these two xml files as the background of the button, for v21 and above we simply set the backgroundTint to the desired color

app/src/main/res/layout/cougar_cash_activity_payment_review.xml, line 130 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Talk to me about this one

Done.

Comments from Reviewable

Reviewed 1 of 18 files at r3, 2 of 7 files at r6, 8 of 8 files at r10.
Review status: all files reviewed at latest revision, 5 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 43 at r10 (raw file):

		((TextView) findViewById(R.id.withAccountHeader).findViewById(R.id.textView)).setText(R.string.with_account_header);
		((TextView) findViewById(R.id.termsAndConditionsHeader).findViewById(R.id.textView)).setText(R.string.terms_and_conditions_header);
		findViewById(R.id.paymentTypeLayout).findViewById(R.id.listIndicatorImage).setVisibility(View.INVISIBLE);

Check out GONE

Comments from Reviewable

Review status: 38 of 40 files reviewed at latest revision, 5 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 196 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
I think we should be able to combine this with the initial loadTransactions function... let me know if you're having any troubles with it

You're going to have to ask Corey why it is done this way. I know there's a reason why, and he could definitely explain it better than me. It's the same logic he used in PersonDirectory.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 43 at r10 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Check out GONE

Done.

Comments from Reviewable

Reviewed 1 of 18 files at r3, 2 of 2 files at r11.
Review status: all files reviewed at latest revision, 4 unresolved discussions.

Comments from Reviewable

Review status: all files reviewed at latest revision, 4 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 196 at r2 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
You're going to have to ask Corey why it is done this way. I know there's a reason why, and he could definitely explain it better than me. It's the same logic he used in PersonDirectory.

He'll work with you on it

Comments from Reviewable

Review status: all files reviewed at latest revision, 4 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 196 at r2 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
He'll work with you on it

Done.

Comments from Reviewable

Reviewed 1 of 1 files at r12.
Review status: all files reviewed at latest revision, 4 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 119 at r12 (raw file):

				public void onSuccess(Call<TransactionWrapper> call, Response<TransactionWrapper> response) {
					List<TransactionWrapper.Transaction> transactions = response.body().getTransactions();
					if (adapter.getItemCount() > 1) {

Remove this and do the notifyDataSetChanged

Comments from Reviewable

Reviewed 1 of 1 files at r13.
Review status: all files reviewed at latest revision, 4 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 119 at r12 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Remove this and do the notifyDataSetChanged

Work with Corey on this one. Let's see if we can't do this without manually calling notifyDataSetChanged and using addAllToList

Comments from Reviewable

Review status: all files reviewed at latest revision, 5 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 150 at r13 (raw file):

			public void onSuccess(Call<ResponseBody> call, Response<ResponseBody> response) {
				new AlertDialog.Builder(CougarCashMainActivity.this)
						.setTitle(alertTitle)

Let's just make the title "Success"

Comments from Reviewable

Reviewed 3 of 3 files at r14.
Review status: all files reviewed at latest revision, 6 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 59 at r14 (raw file):

		ByuRecyclerView recyclerView = (ByuRecyclerView) findViewById(R.id.transactionRecyclerView);
		adapter = new TransactionAdapter(new ArrayList());

Can you put null here?

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

a discussion (no related file):
Changed the munged account number to use • character (+8 on mac)

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
Changed the munged account number to use • character (+8 on mac)

6 before a bank account (••••••1234) or 12 before a credit card (with spaces between every four) (•••• •••• •••• 1234)

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
Also, you remember the retry stuff that we were handling with the finishPayment. We have the same issue with startPayment

Done

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 119 at r12 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Work with Corey on this one. Let's see if we can't do this without manually calling notifyDataSetChanged and using addAllToList

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 150 at r13 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Let's just make the title "Success"

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/CougarCashMainActivity.java, line 59 at r14 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Can you put null here?

Done.

Comments from Reviewable

Reviewed 1 of 18 files at r3, 2 of 2 files at r15.
Review status: all files reviewed at latest revision, 4 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 73 at r15 (raw file):

				if (errorMessage.startsWith("Start Payment Input Error") || errorMessage.startsWith("Start Payment Error for") || errorMessage.startsWith("No plan found for")) {
					dismissProgressDialog();
					new AlertDialog.Builder(PaymentReviewActivity.this)

Instead of doing this yourself, just do showErrorDialog(errorMessage). Will that work?

Comments from Reviewable

Review status: 36 of 40 files reviewed at latest revision, 4 unresolved discussions.

a discussion (no related file):
Previously, romrell4 (Eric Romrell) wrote…
6 before a bank account (••••••1234) or 12 before a credit card (with spaces between every four) (•••• •••• •••• 1234)

Done.

Comments from Reviewable

Review status: 36 of 40 files reviewed at latest revision, 3 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 73 at r15 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of doing this yourself, just do showErrorDialog(errorMessage). Will that work?

Yes that should totally work. Done.

Comments from Reviewable

Reviewed 1 of 45 files at r1, 1 of 18 files at r3, 4 of 4 files at r16, 1 of 1 files at r17.
Review status: all files reviewed at latest revision, 7 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 151 at r16 (raw file):

		// Set up the terms and conditions section
		((TextView) findViewById(R.id.termsConditionsTitleText)).setText(legalees.getHeader());

I think even these can be combined

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 82 at r17 (raw file):

					}
				}
				showErrorDialog(errorMessage);

Uh oh. I don't think this is what you wanted. You might still need it in both places

app/src/main/java/edu/byu/suite/features/parking/controller/CompletePaymentActivity.java, line 82 at r16 (raw file):

		((TextView) findViewById(R.id.termsConditionsTitleText)).setText(termsAndConditions.getHeader());
		((TextView) findViewById(R.id.accountNumberText)).setText(paymentType.getFormattedMungedAccountNum());
		if (paymentType.getAccountType().equals(AccountType.BANK_ACCOUNT)) {

Don't use .equals. Just ==

app/src/main/java/edu/byu/suite/features/parking/controller/CompletePaymentActivity.java, line 83 at r16 (raw file):

		((TextView) findViewById(R.id.accountNumberText)).setText(paymentType.getFormattedMungedAccountNum());
		if (paymentType.getAccountType().equals(AccountType.BANK_ACCOUNT)) {
			((ImageView) findViewById(R.id.accountTypeImage)).setImageResource(R.drawable.icon_bank);

This line can be done with ternary outside of the if. With how many times you've done this line, I think we should move it into the paymentType object. Something like getAccountTypeImage() or even just getImage()

support/src/main/java/edu/byu/support/payment/PaymentType.java, line 56 at r16 (raw file):

	// This method adds a space after every four "*" characters. This is only used when formatting the account number for a credit card
	public String getFormattedMungedAccountNum() {
		String formattedMungedAccountNum = mungedAccountNum.replaceAll("\\*", "•");

Instead of this, let's just replace all of the *s with "", then put 6 •s in front of it in the else. Actually, do this:
String cleanedAccountNum = mungedAccountNum.replaceAll("\\*", "");
if (accountType == AccountType.CREDIT_CARD) {
    return "•••• •••• •••• " + cleanedAccountNum;
} else {
    return "••••••" + cleanedAccountNum;
}

Comments from Reviewable

Review status: all files reviewed at latest revision, 7 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 151 at r16 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
I think even these can be combined

They can't. One is a header view and explicitly separate from the body.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 82 at r17 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Uh oh. I don't think this is what you wanted. You might still need it in both places

You're right. Done.

app/src/main/java/edu/byu/suite/features/parking/controller/CompletePaymentActivity.java, line 82 at r16 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Don't use .equals. Just ==

Done.

app/src/main/java/edu/byu/suite/features/parking/controller/CompletePaymentActivity.java, line 83 at r16 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
This line can be done with ternary outside of the if. With how many times you've done this line, I think we should move it into the paymentType object. Something like getAccountTypeImage() or even just getImage()

Done.

support/src/main/java/edu/byu/support/payment/PaymentType.java, line 56 at r16 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Instead of this, let's just replace all of the *s with "", then put 6 •s in front of it in the else. Actually, do this:
String cleanedAccountNum = mungedAccountNum.replaceAll("\\*", "");
if (accountType == AccountType.CREDIT_CARD) {
    return "•••• •••• •••• " + cleanedAccountNum;
} else {
    return "••••••" + cleanedAccountNum;
}

Done.

Comments from Reviewable

Reviewed 1 of 45 files at r1, 1 of 18 files at r3, 10 of 10 files at r18.
Review status: 42 of 43 files reviewed at latest revision, 3 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 151 at r16 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
They can't. One is a header view and explicitly separate from the body.

Do it :)

Comments from Reviewable

Reviewed 1 of 1 files at r19.
Review status: all files reviewed at latest revision, 3 unresolved discussions.

Comments from Reviewable

Review status: 37 of 43 files reviewed at latest revision, 3 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 151 at r16 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Do it :)

Done.

Comments from Reviewable

Reviewed 1 of 18 files at r3, 1 of 7 files at r6, 7 of 8 files at r20.
Review status: all files reviewed at latest revision, 3 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 146 at r20 (raw file):

		// Set up the terms and conditions section
		((TextView) findViewById(R.id.bodyTextView)).setText(legalees.getFormattedLegalText(paymentType, this));

So why do we have to pass in the paymentType in order to do this? Doesn't the paymentType hold this legalees? If so, let's just put this message on the paymentType object

Comments from Reviewable

Review status: all files reviewed at latest revision, 1 unresolved discussion.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 146 at r20 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
So why do we have to pass in the paymentType in order to do this? Doesn't the paymentType hold this legalees? If so, let's just put this message on the paymentType object

The payment type does not hold this legalees

Comments from Reviewable

Reviewed 1 of 19 files at r3, 5 of 5 files at r21.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 146 at r20 (raw file):
Previously, poolguy (Seth Donaldson) wrote…
The payment type does not hold this legalees

Remove paymentType

Comments from Reviewable

Review status: 38 of 41 files reviewed at latest revision, 1 unresolved discussion.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentReviewActivity.java, line 146 at r20 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Remove paymentType

Done.

Comments from Reviewable

Reviewed 2 of 19 files at r3, 1 of 5 files at r21, 3 of 3 files at r22.
Review status: all files reviewed at latest revision, 2 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 112 at r22 (raw file):

		if (transferAmount >= paymentType.getMinimum()) {
			startPaymentButton.setEnabled(true);
			if (paymentType.getAccountType() == AccountType.CREDIT_CARD) {

Check for fee rather than accountType

app/src/main/java/edu/byu/suite/features/cougarCash/model/LegaleseWrapper.java, line 77 at r22 (raw file):

			AlignmentSpan alignmentSpan = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
			stringBuilder.append(header).append("\n\n").append(body);
			if (!notes.equals("")) {

Reverse !"".equals(notes) for null safe functionality

Comments from Reviewable

Reviewed 1 of 19 files at r3, 1 of 1 files at r23.
Review status: all files reviewed at latest revision, 1 unresolved discussion.

Comments from Reviewable

Review status: all files reviewed at latest revision, 2 unresolved discussions.

app/src/main/java/edu/byu/suite/features/cougarCash/controller/PaymentAmountActivity.java, line 112 at r22 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Check for fee rather than accountType

Done.

app/src/main/java/edu/byu/suite/features/cougarCash/model/LegaleseWrapper.java, line 77 at r22 (raw file):
Previously, romrell4 (Eric Romrell) wrote…
Reverse !"".equals(notes) for null safe functionality

Done.

Comments from Reviewable

Reviewed 1 of 5 files at r21, 1 of 1 files at r24.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable

Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable


Add custom container for SageMaker deployment

Add custom tgi container for SageMaker deployment

Tested it by following the deploy.ipynb notebook, it seems working fine.


Identifiers validation failed for dataset Flora vascular acuática de las áreas naturales protegidas del estado de Morelos, México

Identifier validation failed for the dataset Flora vascular acuática de las áreas naturales protegidas del estado de Morelos, México:

Crawler attempt: 155
Publishing organization: Comisión nacional para el conocimiento y uso de la biodiversidad
Publishing country: MEXICO
Installation: IPTCONABIO
Number of occurrences indexed for this dataset at the time of the issue: 3413
Cause: GBIF IDs hit maximum allowed - 50%, duplicates - 98%, total records count 3433, absent records count 3362
Pipelines execution steps: http://api.gbif.org/v1/pipelines/history/execution/3073419/step

Publisher email
Hello,
I am contacting you from the GBIF Secretariat about a dataset published by the Flora vascular acuática de las áreas naturales protegidas del estado de Morelos, México : https://doi.org/10.15468/2528xu.
We noticed that the occurrenceIDs were changed. We have temporarily paused the ingestions of this dataset.
As you might already know, when an occurrence record has a new occurrenceID for a given dataset, our system considers it to be a new occurrence.
This means that it will be given a new gbifid and a new occurrence URL (like this one: https://www.gbif.org/occurrence/1252968762) and the old gbifid and URL will be deprecated.
In this case, this means that the occurrence URLs would be deprecated when ingesting the newest versions of these datasets.
We would like to check with you if those changes were intentional. Do you know if this is the case?
Please let us know, thanks! We are happy to resume the dataset ingestion.
Note that some users rely on those occurrence URLs and gbifids (like https://bionomia.net for example). In an attempt to improve
the stability of the occurrence URLs and gbifids, we have implemented a warning system to detect these type of changes in datasets (see this news item).
If the data publisher can provide us with a list of old and new occurrenceIDs per record, we can avoid the identifier and URL changes. Could that be an option?
Please let us know if you have any question. Thanks!
All the best,

You can skip/fix identifier validation using the registry UI.

Identifier validation still  failing for the dataset Flora vascular acuática de las áreas naturales protegidas del estado de Morelos, México:

Crawler attempt: 158
Publishing organization: Comisión nacional para el conocimiento y uso de la biodiversidad
Publishing country: MEXICO
Installation: IPTCONABIO
Number of occurrences indexed for this dataset at the time of the issue: 3413
Cause: GBIF IDs hit maximum allowed - 50%, duplicates - 100%, total records count 3433, absent records count 3433
Pipelines execution steps: http://api.gbif.org/v1/pipelines/history/execution/3094247/step

Publisher email
Hello,
I am contacting you from the GBIF Secretariat about a dataset published by the Flora vascular acuática de las áreas naturales protegidas del estado de Morelos, México : https://doi.org/10.15468/2528xu.
We noticed that the occurrenceIDs were changed. We have temporarily paused the ingestions of this dataset.
As you might already know, when an occurrence record has a new occurrenceID for a given dataset, our system considers it to be a new occurrence.
This means that it will be given a new gbifid and a new occurrence URL (like this one: https://www.gbif.org/occurrence/1252968762) and the old gbifid and URL will be deprecated.
In this case, this means that the occurrence URLs would be deprecated when ingesting the newest versions of these datasets.
We would like to check with you if those changes were intentional. Do you know if this is the case?
Please let us know, thanks! We are happy to resume the dataset ingestion.
Note that some users rely on those occurrence URLs and gbifids (like https://bionomia.net for example). In an attempt to improve
the stability of the occurrence URLs and gbifids, we have implemented a warning system to detect these type of changes in datasets (see this news item).
If the data publisher can provide us with a list of old and new occurrenceIDs per record, we can avoid the identifier and URL changes. Could that be an option?
Please let us know if you have any question. Thanks!
All the best,

You can skip/fix identifier validation using the registry UI.


react warnings are loud when generating react templates

Describe the bug
When I generate markdown template I get this in the console
Warning: Each child in a list should have a unique "key" prop. See https://reactjs.org/link/warning-keys for more information.
    at Server (/Users/wookiee/sources/markdown-template/__transpiled/asyncapi.js:227:26)
Warning: Each child in a list should have a unique "key" prop.

Check the top-level render call using <Text>. See https://reactjs.org/link/warning-keys for more information.
    at Schema (/Users/wookiee/sources/markdown-template/__transpiled/asyncapi.js:320:21)

How to Reproduce
just generate with markdown-template and you'll see it
Expected behavior
these logs should not be visible

If I am not mistaken this is currently not possible to solve natively since React does not allow us to suppress these warnings...
Solutions:

Use production build. Is that even possible with the npm package? - https://reactjs.org/docs/optimizing-performance.html#use-the-production-build
Hook into console log and alter default behavior - https://stackoverflow.com/questions/57904356/how-to-hide-componentwillmount-warnings/60818832#60818832

cc @magicmatatjahu

Production build also throw errors, but as error code :) Hooking default behaviour of console is not a good option. We should fix this error in template or write our own JSX pragma.

Production build also throw errors, but as error code

Are you sure? Since the warnings shown by @derberg are only optimizations they would be removed by the production build right?
As per https://reactjs.org/docs/optimizing-performance.html#use-the-production-build

By default, React includes many helpful warnings. These warnings are very useful in development. However, they make React larger and slower so you should make sure to use the production version when you deploy the app.

@jonaslagoni why not fixing the warnings and adding the "key" prop to the children?

@jonaslagoni why not fixing the warnings and adding the "key" prop to the children?

That will most likely also be needed, but the problem is all React templates have this problem.

Keys help React identify which items have changed, are added, or are removed
https://reactjs.org/link/warning-keys

With our use case, this warning does not apply to us. So if we somehow could suppress them, that would solve all the problems.


How to: Set up a D8/Composer site on Pantheon without CircleCI, custom upstreams, etc.

After some trial and error, I came up with this "recipe" to use ddev locally to manage a Drupal8 site hosted on Pantheon without having to setup/learn/manage additional tools like CircleCI, custom upstreams, etc. I have tested with creating new sites on Pantheon but have not tested with converting an existing site.

Create a new D8 site on the Pantheon dashboard. Complete the setup of the dev site and commit the settings.php file via the dashboard.
Change the development mode on the Pantheon dashboard to Git mode.
Do a manual backup of the Pantheon dev site so you will have a database to import into ddev later.
Clone the Pantheon dev site into your local directory.
Make the following changes to your local project file structure to serve the site from a Web directory instead of the root directory (as noted in the Pantheon docs about nested docroots)

In your project directory, edit pantheon.yml to add this line: web_docroot:true
Navigate into the project directory (cd project-name)
Git push the changed pantheon.yml to the Pantheon dev site
Run mkdir web to create the web directory
Run git mv -k $(find . -type f -maxdepth 1 | grep -v pantheon.yml) core drush modules profiles sites themes vendor index.php web to move all the site files into the newly-created web directory
Check your project's file structure to confirm the web directory was created and the files were moved. If so, git push these changes to the Pantheon dev site.

Run ddev config pantheon to add the ddev setup. This will add a .ddev directory in your projects' directory.
Run ddev pull to pull the Pantheon dev site's database and files directory into your local project.

From this point on, you can use Composer to manage/update the site, install modules, etc. by using the "ddev exec composer" commands.
Not: After you set up the site to be managed via Composer, you must set the Pantheon upstream to empty so it will disable the Pantheon automatic core updates. This can be done using Terminus for Pantheon by running this command: terminus site:upstream:set <site> empty where  is your Pantheon site name.

Thanks so much for this!

This is fantastic! Linking to your blog article to provide some of the background motivation. Also, this might be a great example of a HOWTO, and therefore I'm going to cross-link to this issue (https://github.com/drud/ddev/issues/659), where we can decide where to place this information in our docs (even if it's just a section that links back to this issue, for example). I'll close out this issue and we can address in #659.

Thank you Danita for your excellent post!!!  I have been struggling to set this up myself and with your help I FINALLY got this working on a windows 10 machine.
One question, why must we use ddev exec composer prefixes to our commands instead of the standard ddev composer?
I tried it both ways and indeed I can only get composer to work using ddev exec composer  in place of ddev composer
A couple of suggestions to these instructions:

The edit to the pantheon.yml file needs a space before the word true.  It should read like this: web_docroot: true

I used the full git mv string provided by Pantheon instead of your post and this put the pantheon.upstream.yml file in the correct place.  Here's the command from pantheon : git mv -k $(find . -maxdepth 1 -type f | egrep -v 'pantheon.yml|.gitignore|README.md|pantheon.upstream.yml') core drush modules profiles sites themes vendor index.php web

I also made a note of how the directory should look after all of the changes - I'm very new at all of this and needed extra visuals.  The one on Pantheon did not include the .yml files or .gitignore

Site folder
|--web
|--core
|--drush
|--modules
|--profiles
|--sites
|--default
|--settings.php
|--themes
|--vendor
|--index.php
.gitignore
pantheon.upstream.yml
pantheon.yml

Also should we add a step to update the .gitignore file to account for the new directory structure?  I'm not sure on this one.

Ignore paths that contain user-generated content.
web/sites//files
web/sites//private
web/files/*
Ignore SimpleTest multi-site environment.
web/sites/simpletest
Thanks again for taking the time to document this. - Alysa

When she wrote this, there was no ddev composer. It was created mostly for Windows users (because composer is awkward and unpredictable there, see Windows OS and Composer in docs.

Thanks for this - I looked at that page some time ago, and it didn't quite answer my question - I'm just too new to all of this.  I'll share your response with another developer who is questioning why as well.
Thanks again.


Add Bits.div, Bits.mod and related primitives

This PR introduces mainly Bits.div and Bits.rem primitives and some related ones like Bits.cmp, Bits.shift_left, Bits.shift_right and Bits.size.
Note also that this PR significantly changes the way equality is handled for Bits.
Likewise for Word, Bits now uses internal Cmp type for equality and comparisons.
Equality is based on actual math, not structure anymore, in other words: 1001 equals 10010 (so ignoring leading zeros).
Today this is not the case and could have an impact in the codebase (Bits.eql is used at some places, e.g. in Kind.Term.equal).
This PR also brings bitwise binops and Bits.trim that are also present in Word.
Note I didn't do anything special regarding division by zero. Probably we would like a trap behavior (like it is today with Nat.div and in future with Word.div).

Won't changing equality like that make proving theorems about Bits.eql harder though?

I will revert Bits.eql because I think it may affect the compiler and I don't want to risk. I'll check the rest more carefully later on.


Textual change.

Text change: "Here's your App Generated Strong Passcode"

Text change: "Password mismatch"

"You have successfully backed up your wallet on the cloud"

The backup got confirmed but on top it says never

B should be capital

It should be Password instead of passcode.

"You have successfully backed up your wallet on the cloud".
The word wallet is missing in sentece.Tested on dev app v2.0.75(446)

It should be Password instead of passcode

It should be Password instead of passcode.

Verified this issue on dev app v2.0.75(465)


Agenda entries not in the correct format

Type of activity should be smaller and maybe in bold.
It should be 'Speaker - Company'

Although I have updated a few to this format in my latest commit, there are still a handfull which I have no information about. So I'll leave this issue open for the time being.


Added Veriphone & Verimail to data validation

Thank you for taking the time to work on a Pull Request for this project!
To ensure your PR is dealt with swiftly please check the following:

[x] Your submissions are formatted according to the guidelines in the contributing guide
[x] Your additions are ordered alphabetically
[x] Your submission has a useful description
[x] The description does not end with punctuation
[x] Each table column should be padded with one space on either side
[x] You have searched the repository for any relevant issues or pull requests
[ ] Any category you are creating has the minimum requirement of 3 items
[x] All changes have been squashed into a single commit

Thanks for the contribution @adbek!
Can you please solve the confict?

@adbek, I noticed that you deleted the fork from this project, so it will not be possible to resolve the conflict for the merger.
If you still want to list this API here, open a new PR, please.


--ida option doesn't work with IDA 7.4

Some of the used methods have been renamed in IDA 7.4: https://www.hex-rays.com/products/ida/support/ida74_idapython_no_bc695_porting_guide.shtml
It is not difficult to fix this, the question is: do we want to keep this option?
If Floss could run in Python3, a better approach would be to just provide a json output, as an ida script/plunging could call floss. Taking into account that this is not an option and that this script is really useful, I would fix it. Most likely we want to have a plugin for < 7.3 and one for >= 7.4.
Related to https://github.com/fireeye/flare-floss/issues/328

I think the larger rework will take some time and a short-term fix will be helpful to many people.
If you have a moment, we'd appreciate a PR to change to the new IDAPython API (>IDA 7.0). I don't think we have to keep supporting the legacy API at this point.

I'll send a PR 👍


Remove version: DOSBox.DOSBox version 0.74-3

[Automated] It returns code over 400 in all urls
Microsoft Reviewers: Open in CodeFlow

Close with reason: URL works;


Support larger keys

So the problem is that we provide a default magic_key / list_key that can be unsuitable for larger sizes?
Seems like a good fix.


Integration tests: refactor and new offline tests

Read from buildpack.toml instead of hardcoding
Add offline tests

Signed-off-by: Arjun Sreedharan<EMAIL_ADDRESS>

Looks like there are still integration test failures here. I wonder if we need to do something similar to what was done in the php language family cnb when testing these fixtures. See the BeAvailableAndReady method here

@dwillist Thanks. That's something we were looking for. Have copied the matcher in for now but will move it to occam matchers later


my EleLight tuya bulb will not work with the present TuyaColorLight.prototype.setColor method because this tuya Bulb ignores dps 5 if you set dps 3 or dps 4 while setting dps 5,  label:bug

Describe the bug
the tuya Bulb ignores dps 5 if you set dps 3 and/or dps 4 while setting dps 5
To Reproduce
Steps to reproduce the behavior:

get yourself a EleLight from URL: https://www.amazon.com/Dimmable-Multicolored-Controlled-Compatible-Assistant/dp/B07FY6V4QJ
try to set the color using your software where it sets dps 1, dps 2, dps 3, dps 4, and dps 5
The color on the light will go from color to White. Even if dps 2 is set to colour.

Expected behavior
I expected the bulb to change to the color I choose, not to turn white
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS] Window 10
Browser [e.g. chrome, safari] Chrome
Version [e.g. 22]

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Additional context
I added a new update to my pull request that takes care of this problem and also gives you the correct linear equations to use for brightness conversion to 255 scale and the correct conversion equations for color temperature scale and saturation scales.   I also discovered the correct format for dps 5 14 hex digit setting.  Please see my comments on my current pull request number: fa22807
As far as I can determine, the correct format for dps 5 is as follows:
If the bulb is in 'colour' mode than the dps 3 and dps 4 are ignored but if you set them now some tuya bulbs will ignore dps 5 because you set dps 3 or dps 4.  The tuya bulb will get the saturation settings and the brightness setting from (dps 5) hex digits.
A. FOR 'colour' mode the bulb looks at dps 1, dps 2, and dps 5.
i.   DPS 5 is in the following format:
ii.  HSL to HEX format are the leftmost hex digits (hex digits 14 - 9). This is as you did it before.
iii. hex digits 8 - 5 are the HSB/HSL Hue value in HEX format.  Four HEX digits needed here.
iv.  hex digits 4 - 3 are the HSB/HSL Saturation percentage as a value (converted to "0 - 255" scale) in HEX format.
v.   hex digits 2 - 1 are the HSB Brightness percentage as a value (converted to "25 - 255" scale) in HEX format.
B. if the bulb is in 'white' mode then the dps 5 value is ignored by the bulb, FOR 'white' mode the bulb looks at dps 1, dps 2, dps 3 and dps 4
i.  DPS 3 is the HSB/HSL Brightness percentage converted to a value; "25 to 255" in decimal format.
ii.  DPS 4 is the HSB/HSL Saturation percentage converted to a value; "0 to 255" in decimal format.
So to give the software more flexibility, please do not automatically set dps 3 and dps 4, only set them when the bulb really needs them set.

I seem to have the same issue with a Tuya bulb from an Indonesian brand "Bardi". I cannot set the color, just the brightness.


Interactive

Extension:
https://github.com/Sulagna-Dutta-Roy/GGExtensions/assets/157527085/1b2ec788-45cd-4c31-8846-8d88ffd63b9e
Hi @Sulagna-Dutta-Roy ,
I hope you're doing well. I've addressed the issue #1588 and created a pull request to resolve it.
Could you please review the PR and let me know if any adjustments are needed?
Also, please check the level assigned according to my PR before merging.
Best regards,
Tanisha Garg

@Sulagna-Dutta-Roy You want me to remove gaming extension from the title in extension?

@Sulagna-Dutta-Roy Please review it again.

Still not changed kindly do the change as per the above Instructions @taneeshaa15

@Sulagna-Dutta-Roy ma'am I am sorry but I can't properly understand what ypu want me to do.
May you please explain it to me?

Directory== Folder name

Okay ma'am


Initial version

Are you able to use this orb when creating a new dashboard, or will you only be able to operate on existing ones?

Are you able to use this orb when creating a new dashboard, or will you only be able to operate on existing ones?

Yup, it works for both


Locales related to app provsionning fixes

Better description when unauthorised to add an app

@ouranos Related to https://github.com/maestrano/mno-enterprise-angular/pull/86