Skip to content

Commit

Permalink
Fix crash on rotation in edit view
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLastProject committed Aug 8, 2021
1 parent 4471104 commit 5ddcb0a
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 5 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## v2.2.2 (2021-08-08)

Changes:

- Fix crash on rotation in loyalty card edit activity

## v2.2.1 (2021-08-07)

Changes:
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ android {
applicationId "me.hackerchick.catima"
minSdkVersion 19
targetSdkVersion 30
versionCode 77
versionName "2.2.1"
versionCode 78
versionName "2.2.2"

vectorDrawables.useSupportLibrary true
multiDexEnabled true
Expand Down
56 changes: 54 additions & 2 deletions app/src/main/java/protect/card_locker/LoyaltyCard.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package protect.card_locker;

import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcelable;

import com.google.zxing.BarcodeFormat;

Expand All @@ -10,7 +12,7 @@

import androidx.annotation.Nullable;

public class LoyaltyCard {
public class LoyaltyCard implements Parcelable {
public final int id;
public final String store;
public final String note;
Expand All @@ -22,6 +24,7 @@ public class LoyaltyCard {
@Nullable
public final String barcodeId;

@Nullable
public final BarcodeFormat barcodeType;

@Nullable
Expand All @@ -31,7 +34,7 @@ public class LoyaltyCard {

public LoyaltyCard(final int id, final String store, final String note, final Date expiry,
final BigDecimal balance, final Currency balanceType, final String cardId,
final String barcodeId, final BarcodeFormat barcodeType, final Integer headerColor,
@Nullable final String barcodeId, @Nullable final BarcodeFormat barcodeType, @Nullable final Integer headerColor,
final int starStatus)
{
this.id = id;
Expand All @@ -47,6 +50,38 @@ public LoyaltyCard(final int id, final String store, final String note, final Da
this.starStatus = starStatus;
}

protected LoyaltyCard(Parcel in) {
id = in.readInt();
store = in.readString();
note = in.readString();
long tmpExpiry = in.readLong();
expiry = tmpExpiry != -1 ? new Date(tmpExpiry) : null;
balance = (BigDecimal) in.readValue(BigDecimal.class.getClassLoader());
balanceType = (Currency) in.readValue(Currency.class.getClassLoader());
cardId = in.readString();
barcodeId = in.readString();
String tmpBarcodeType = in.readString();
barcodeType = !tmpBarcodeType.isEmpty() ? BarcodeFormat.valueOf(tmpBarcodeType) : null;
int tmpHeaderColor = in.readInt();
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
starStatus = in.readInt();
}

@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
parcel.writeLong(expiry != null ? expiry.getTime() : -1);
parcel.writeValue(balance);
parcel.writeValue(balanceType);
parcel.writeString(cardId);
parcel.writeString(barcodeId);
parcel.writeString(barcodeType != null ? barcodeType.toString() : "");
parcel.writeInt(headerColor != null ? headerColor : -1);
parcel.writeInt(starStatus);
}

public static LoyaltyCard toLoyaltyCard(Cursor cursor)
{
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
Expand Down Expand Up @@ -89,4 +124,21 @@ public static LoyaltyCard toLoyaltyCard(Cursor cursor)

return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred);
}

@Override
public int describeContents() {
return id;
}

public static final Creator<LoyaltyCard> CREATOR = new Creator<LoyaltyCard>() {
@Override
public LoyaltyCard createFromParcel(Parcel in) {
return new LoyaltyCard(in);
}

@Override
public LoyaltyCard[] newArray(int size) {
return new LoyaltyCard[size];
}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
private static final String TAG = "Catima";

private final String STATE_TAB_INDEX = "savedTab";
private final String STATE_TEMP_CARD = "tempLoyaltyCard";

private static final int ID_IMAGE_FRONT = 0;
private static final int ID_IMAGE_BACK = 1;
Expand Down Expand Up @@ -185,10 +186,12 @@ public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
tabs = findViewById(R.id.tabs);
savedInstanceState.putInt(STATE_TAB_INDEX, tabs.getSelectedTabPosition());
savedInstanceState.putParcelable(STATE_TEMP_CARD, tempLoyaltyCard);
}

@Override
public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
tempLoyaltyCard = savedInstanceState.getParcelable(STATE_TEMP_CARD);
super.onRestoreInstanceState(savedInstanceState);
tabs = findViewById(R.id.tabs);
tabs.selectTab(tabs.getTabAt(savedInstanceState.getInt(STATE_TAB_INDEX)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ private void checkAllFields(final Activity activity, ViewMode mode,
}

@Test
public void noDataLossOnResume()
public void noDataLossOnResumeOrRotate()
{
registerMediaStoreIntentHandler();

Expand Down Expand Up @@ -421,6 +421,22 @@ public void noDataLossOnResume()

// Check if no changes lost
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", BarcodeFormat.QR_CODE.name(), frontBitmap, backBitmap);

// Rotate to landscape
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
activity.recreate();
shadowOf(getMainLooper()).idle();

// Check if no changes lost
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", BarcodeFormat.QR_CODE.name(), frontBitmap, backBitmap);

// Rotate to portrait
shadowOf(getMainLooper()).idle();
activity.recreate();
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

// Check if no changes lost
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", BarcodeFormat.QR_CODE.name(), frontBitmap, backBitmap);
}
}

Expand Down

0 comments on commit 5ddcb0a

Please sign in to comment.