From c526fc400ce12384e9865612060de474c7aedc19 Mon Sep 17 00:00:00 2001 From: Ben Rericha Date: Sat, 29 Mar 2025 03:26:41 -0500 Subject: [PATCH 1/6] Add StarredIssues table, methods, and tests --- .../android/a5calls/model/DatabaseHelper.java | 59 ++++++++++++++++++- .../a5calls/model/DatabaseHelperTest.java | 25 +++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java index a8b658ed..30fd3662 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java @@ -22,13 +22,15 @@ public class DatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "DatabaseHelper"; - private static final int DATABASE_VERSION = 3; + private static final int DATABASE_VERSION = 4; @VisibleForTesting protected static final String CALLS_TABLE_NAME = "UserCallsDatabase"; @VisibleForTesting protected static final String ISSUES_TABLE_NAME = "UserIssuesTable"; @VisibleForTesting protected static final String CONTACTS_TABLE_NAME = "UserContactsTable"; + @VisibleForTesting + protected static final String STARRED_ISSUES_TABLE_NAME = "StarredIssuesTable"; // Can be used to control time in tests. private TimeProvider mTimeProvider; @@ -82,6 +84,15 @@ public static class ContactColumns { "CREATE TABLE " + CONTACTS_TABLE_NAME + " (" + ContactColumns.CONTACT_ID + " STRING, " + ContactColumns.CONTACT_NAME + " STRING);"; + private static class StarredIssuesColumns { + public static String ID = "issueid"; + public static String TIMESTAMP = "timestamp"; + } + + private static final String STARRED_ISSUES_TABLE_CREATE = + "CREATE TABLE " + STARRED_ISSUES_TABLE_NAME + " (" + StarredIssuesColumns.ID + " STRING, " + + StarredIssuesColumns.TIMESTAMP + " INTEGER);"; + public DatabaseHelper(Context context) { this(context, new DefaultTimeProvider()); } @@ -96,6 +107,7 @@ public void onCreate(SQLiteDatabase db) { db.execSQL(CALLS_TABLE_CREATE); db.execSQL(ISSUES_TABLE_CREATE); db.execSQL(CONTACTS_TABLE_CREATE); + db.execSQL(STARRED_ISSUES_TABLE_CREATE); } @Override @@ -124,6 +136,10 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { new String[]{Outcome.Status.VM.toString()}); currentDbVersion = 3; } + + if (oldVersion < 4 && currentDbVersion < newVersion) { + db.execSQL(STARRED_ISSUES_TABLE_CREATE); + } } /** @@ -164,6 +180,13 @@ private void addContact(String contactId, String contactName) { SQLiteDatabase.CONFLICT_IGNORE); } + public void addStarredIssue(String issueId) { + ContentValues values = new ContentValues(); + values.put(StarredIssuesColumns.ID, issueId); + values.put(StarredIssuesColumns.TIMESTAMP, mTimeProvider.currentTimeMillis()); + getWritableDatabase().insert(STARRED_ISSUES_TABLE_NAME, null, values); + } + public String getIssueName(String issueId) { Cursor c = getReadableDatabase().rawQuery("SELECT " + IssuesColumns.ISSUE_NAME + " FROM " + ISSUES_TABLE_NAME + " WHERE " + IssuesColumns.ISSUE_ID + " = '" + issueId + "'", @@ -333,6 +356,38 @@ public List> getCallCountsByIssue() { return result; } + public List> getStarredIssues() { + Cursor c = getReadableDatabase().rawQuery( + "SELECT " + StarredIssuesColumns.ID + ", " + StarredIssuesColumns.TIMESTAMP + + " FROM " + STARRED_ISSUES_TABLE_NAME, null); + List> result = new ArrayList<>(); + while (c.moveToNext()) { + Pair next = new Pair<>(c.getString(0), c.getInt(1)); + result.add(next); + } + c.close(); + return result; + } + + // Delete any starred issues not present in the provided list of issue ids to prevent the + // table from filling up with issues that don't exist any more so the app doesn't have to look + // through as many items when seeing if the issue needs to be marked as starred + public int trimStarredIssues(List ids) { + StringBuilder placeholders = new StringBuilder(); + for (int i = 0; i < ids.size(); i++) { + placeholders.append("?"); + if (i < ids.size() - 1) { + placeholders.append(", "); + } + } + + String whereClause = StarredIssuesColumns.ID + " NOT IN (" + + placeholders + ")"; + String[] whereArgs = ids.toArray(new String[0]); + + return getWritableDatabase().delete(STARRED_ISSUES_TABLE_NAME, whereClause, whereArgs); + } + @VisibleForTesting public static String sanitizeContactId(String contactId) { // TODO this only works on single quotes and not double quotes. Triple quotes are still @@ -342,4 +397,6 @@ public static String sanitizeContactId(String contactId) { } return contactId; } + + } diff --git a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java index 2d4e62c6..d24cd038 100644 --- a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java +++ b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java @@ -1,7 +1,5 @@ package org.a5calls.android.a5calls.model; -import android.os.Parcel; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -30,6 +28,7 @@ public void setUp() { getApplicationContext().deleteDatabase(DatabaseHelper.CALLS_TABLE_NAME); getApplicationContext().deleteDatabase(DatabaseHelper.ISSUES_TABLE_NAME); getApplicationContext().deleteDatabase(DatabaseHelper.CONTACTS_TABLE_NAME); + getApplicationContext().deleteDatabase(DatabaseHelper.STARRED_ISSUES_TABLE_NAME); // Create a fake TimeProvider so we can control timestamps. mCalendar = new Calendar.Builder() @@ -343,6 +342,28 @@ public void testHasCalledToday() { } } + @Test + public void starredIssues_AddIssue() { + mDatabase.addStarredIssue("test-issue"); + assertEquals(1, mDatabase.getStarredIssues().size()); + assertEquals("test-issue", mDatabase.getStarredIssues().getFirst().first); + } + + @Test + public void starredIssues_TrimsIssues() { + mDatabase.addStarredIssue("test-issue2"); + mDatabase.addStarredIssue("test-issue3"); + mDatabase.addStarredIssue("keep"); + mDatabase.trimStarredIssues(List.of("keep")); + assertEquals(1, mDatabase.getStarredIssues().size()); + assertEquals("keep", mDatabase.getStarredIssues().getFirst().first); + } + + @Test + public void starredIssue_TrimIssues() { + + } + // Wrapper class for holding a pair of issues and contacts. private static class IssuesAndContacts { List contacts; From 6525896f962782e571f182d40d81faa3feedec6f Mon Sep 17 00:00:00 2001 From: Ben Rericha Date: Sat, 29 Mar 2025 03:43:03 -0500 Subject: [PATCH 2/6] Change getStarredIssues to only return issue ids --- .../a5calls/android/a5calls/model/DatabaseHelper.java | 11 +++++------ .../android/a5calls/model/DatabaseHelperTest.java | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java index 30fd3662..d7a6e313 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java @@ -356,14 +356,13 @@ public List> getCallCountsByIssue() { return result; } - public List> getStarredIssues() { + public List getStarredIssues() { Cursor c = getReadableDatabase().rawQuery( - "SELECT " + StarredIssuesColumns.ID + ", " + StarredIssuesColumns.TIMESTAMP - + " FROM " + STARRED_ISSUES_TABLE_NAME, null); - List> result = new ArrayList<>(); + "SELECT " + StarredIssuesColumns.ID + " FROM " + STARRED_ISSUES_TABLE_NAME + + " ORDER BY " + StarredIssuesColumns.TIMESTAMP, null); + List result = new ArrayList<>(); while (c.moveToNext()) { - Pair next = new Pair<>(c.getString(0), c.getInt(1)); - result.add(next); + result.add(c.getString(0)); } c.close(); return result; diff --git a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java index d24cd038..ea78d393 100644 --- a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java +++ b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java @@ -346,7 +346,7 @@ public void testHasCalledToday() { public void starredIssues_AddIssue() { mDatabase.addStarredIssue("test-issue"); assertEquals(1, mDatabase.getStarredIssues().size()); - assertEquals("test-issue", mDatabase.getStarredIssues().getFirst().first); + assertEquals("test-issue", mDatabase.getStarredIssues().getFirst()); } @Test @@ -356,7 +356,7 @@ public void starredIssues_TrimsIssues() { mDatabase.addStarredIssue("keep"); mDatabase.trimStarredIssues(List.of("keep")); assertEquals(1, mDatabase.getStarredIssues().size()); - assertEquals("keep", mDatabase.getStarredIssues().getFirst().first); + assertEquals("keep", mDatabase.getStarredIssues().getFirst()); } @Test From ae9bbc322c2f0bd4311e41a5ab3f54fb4529d246 Mon Sep 17 00:00:00 2001 From: Ben Rericha Date: Sat, 29 Mar 2025 04:31:49 -0500 Subject: [PATCH 3/6] Add method to remove a single issue --- .../a5calls/android/a5calls/model/DatabaseHelper.java | 8 ++++++++ .../android/a5calls/model/DatabaseHelperTest.java | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java index d7a6e313..9da471f1 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/model/DatabaseHelper.java @@ -187,6 +187,14 @@ public void addStarredIssue(String issueId) { getWritableDatabase().insert(STARRED_ISSUES_TABLE_NAME, null, values); } + public void removeStarredIssue(String issueId) { + getWritableDatabase().delete( + STARRED_ISSUES_TABLE_NAME, + StarredIssuesColumns.ID + " = ?", + List.of(issueId).toArray(new String[0]) + ); + } + public String getIssueName(String issueId) { Cursor c = getReadableDatabase().rawQuery("SELECT " + IssuesColumns.ISSUE_NAME + " FROM " + ISSUES_TABLE_NAME + " WHERE " + IssuesColumns.ISSUE_ID + " = '" + issueId + "'", diff --git a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java index ea78d393..4d180d22 100644 --- a/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java +++ b/5calls/app/src/test/java/org/a5calls/android/a5calls/model/DatabaseHelperTest.java @@ -349,6 +349,15 @@ public void starredIssues_AddIssue() { assertEquals("test-issue", mDatabase.getStarredIssues().getFirst()); } + @Test + public void starredIssues_DeletesIssue() { + String issue = "to-be-deleted"; + mDatabase.addStarredIssue(issue); + assertTrue(mDatabase.getStarredIssues().contains(issue)); + mDatabase.removeStarredIssue(issue); + assertFalse(mDatabase.getStarredIssues().contains(issue)); + } + @Test public void starredIssues_TrimsIssues() { mDatabase.addStarredIssue("test-issue2"); From ebc67d395936b472df4e93919ce0ff49bbe6351b Mon Sep 17 00:00:00 2001 From: Ben Rericha Date: Sat, 29 Mar 2025 04:44:43 -0500 Subject: [PATCH 4/6] Star/unstar action in IssueActivity, show star in IssuesAdapter --- .../a5calls/adapter/IssuesAdapter.java | 16 +++++++++- .../a5calls/controller/IssueActivity.java | 28 +++++++++++++++++- .../a5calls/controller/MainActivity.java | 17 +++++++++++ .../ic_star_outline_white_24dp.png | Bin 0 -> 735 bytes .../res/drawable-hdpi/ic_star_white_24dp.png | Bin 0 -> 548 bytes .../res/drawable-hdpi/ic_star_yellow_24dp.png | Bin 0 -> 596 bytes .../ic_star_outline_white_24dp.png | Bin 0 -> 456 bytes .../res/drawable-mdpi/ic_star_white_24dp.png | Bin 0 -> 355 bytes .../res/drawable-mdpi/ic_star_yellow_24dp.png | Bin 0 -> 391 bytes .../ic_star_outline_white_24dp.png | Bin 0 -> 978 bytes .../res/drawable-xhdpi/ic_star_white_24dp.png | Bin 0 -> 706 bytes .../drawable-xhdpi/ic_star_yellow_24dp.png | Bin 0 -> 762 bytes .../ic_star_outline_white_24dp.png | Bin 0 -> 1545 bytes .../drawable-xxhdpi/ic_star_white_24dp.png | Bin 0 -> 1106 bytes .../drawable-xxhdpi/ic_star_yellow_24dp.png | Bin 0 -> 1183 bytes .../ic_star_outline_white_24dp.png | Bin 0 -> 2156 bytes .../drawable-xxxhdpi/ic_star_white_24dp.png | Bin 0 -> 1473 bytes .../drawable-xxxhdpi/ic_star_yellow_24dp.png | Bin 0 -> 1571 bytes 5calls/app/src/main/res/menu/menu_issue.xml | 10 +++++-- 5calls/app/src/main/res/values/strings.xml | 5 ++++ 20 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 5calls/app/src/main/res/drawable-hdpi/ic_star_outline_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-hdpi/ic_star_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-hdpi/ic_star_yellow_24dp.png create mode 100644 5calls/app/src/main/res/drawable-mdpi/ic_star_outline_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-mdpi/ic_star_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-mdpi/ic_star_yellow_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xhdpi/ic_star_outline_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xhdpi/ic_star_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xhdpi/ic_star_yellow_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxhdpi/ic_star_outline_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxhdpi/ic_star_yellow_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxxhdpi/ic_star_outline_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxxhdpi/ic_star_white_24dp.png create mode 100644 5calls/app/src/main/res/drawable-xxxhdpi/ic_star_yellow_24dp.png diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java index 11e36835..47251378 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java @@ -8,7 +8,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -49,6 +48,8 @@ public class IssuesAdapter extends RecyclerView.Adapter private final Activity mActivity; private final Callback mCallback; + private List starredIssueIds = new ArrayList<>(); + public interface Callback { void refreshIssues(); @@ -81,6 +82,11 @@ public void setAllIssues(List issues, int errorType) { } } + public void setStarredIssues(List issueIds) { + starredIssueIds = issueIds; + notifyDataSetChanged(); + } + public void setAddressError(int error) { mAddressErrorType = error; mContacts.clear(); @@ -232,6 +238,14 @@ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int IssueViewHolder vh = (IssueViewHolder) holder; final Issue issue = mIssues.get(position); vh.name.setText(issue.name); + + if (starredIssueIds.contains(issue.id)) { + vh.name.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.ic_star_yellow_24dp, 0); + } else { + // To undo previously set drawable in the event of an issue being unstarred + vh.name.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0 ,0); + } + vh.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/IssueActivity.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/IssueActivity.java index 040fe1b0..9e38b093 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/IssueActivity.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/IssueActivity.java @@ -64,6 +64,7 @@ public class IssueActivity extends AppCompatActivity { public static final String KEY_ISSUE = "key_issue"; public static final String KEY_IS_LOW_ACCURACY = "key_is_low_accuracy"; public static final String KEY_DONATE_IS_ON = "key_donate_is_on"; + public static final String KEY_IS_STARRED = "key_is_starred"; public static final int RESULT_OK = 1; public static final int RESULT_SERVER_ERROR = 2; @@ -80,6 +81,7 @@ public class IssueActivity extends AppCompatActivity { private boolean mIsLowAccuracy = false; private boolean mDonateIsOn = false; private boolean mIsAnimating = false; + private boolean mIsStarred = false; private ActivityIssueBinding binding; @@ -96,12 +98,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } mIsLowAccuracy = getIntent().getBooleanExtra(KEY_IS_LOW_ACCURACY, false); mDonateIsOn = getIntent().getBooleanExtra(KEY_DONATE_IS_ON, false); + mIsStarred = getIntent().getBooleanExtra(KEY_IS_STARRED, false); setContentView(binding.getRoot()); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setTitle(mIssue.name); + // getSupportActionBar().setTitle(mIssue.name); + getSupportActionBar().setDisplayShowTitleEnabled(false); } binding.issueName.setText(mIssue.name); @@ -202,6 +206,7 @@ protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(KEY_ISSUE, mIssue); outState.putBoolean(KEY_IS_LOW_ACCURACY, mIsLowAccuracy); + outState.putBoolean(KEY_IS_STARRED, mIsStarred); } @Override @@ -272,6 +277,16 @@ public void onClick(View view) { public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_issue, menu); + + MenuItem starItem = menu.findItem(R.id.menu_star); + if (mIsStarred) { + starItem.setIcon(R.drawable.ic_star_white_24dp); + starItem.setTitle(R.string.action_unstar_issue); + } else { + starItem.setIcon(R.drawable.ic_star_outline_white_24dp); + starItem.setTitle(R.string.action_star_issue); + } + return true; } @@ -285,6 +300,17 @@ public boolean onOptionsItemSelected(MenuItem item) { sendShare(); return true; } + if (item.getItemId() == R.id.menu_star) { + DatabaseHelper db = AppSingleton.getInstance(getApplicationContext()).getDatabaseHelper(); + if (mIsStarred) { + db.removeStarredIssue(mIssue.id); + mIsStarred = false; + } else { + db.addStarredIssue(mIssue.id); + mIsStarred = true; + } + invalidateOptionsMenu(); + } if (item.getItemId() == R.id.menu_details) { showIssueDetails(); return true; diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java index ce21d21e..dd85eda5 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java @@ -54,6 +54,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; import static android.view.View.VISIBLE; @@ -86,6 +87,7 @@ public class MainActivity extends AppCompatActivity implements IssuesAdapter.Cal private boolean mShowLowAccuracyWarning = true; private boolean mDonateIsOn = false; private FirebaseAuth mAuth = null; + private List starredIssues; private ActivityMainBinding binding; @@ -279,6 +281,7 @@ public void onGlobalLayout() { }); loadStats(); + loadStarredIssues(); mAddress = accountManager.getAddress(this); mLatitude = accountManager.getLat(this); @@ -352,6 +355,7 @@ public void startIssueActivity(Context context, Issue issue) { issueIntent.putExtra(RepCallActivity.KEY_LOCATION_NAME, mLocationName); issueIntent.putExtra(IssueActivity.KEY_IS_LOW_ACCURACY, mIsLowAccuracy); issueIntent.putExtra(IssueActivity.KEY_DONATE_IS_ON, mDonateIsOn); + issueIntent.putExtra(IssueActivity.KEY_IS_STARRED, starredIssues.contains(issue.id)); startActivityForResult(issueIntent, ISSUE_DETAIL_REQUEST); } @@ -428,6 +432,12 @@ public void onIssuesReceived(List issues) { mIssuesAdapter.setAllIssues(issues, IssuesAdapter.NO_ERROR); mIssuesAdapter.setFilterAndSearch(mFilterText, mSearchText); binding.swipeContainer.setRefreshing(false); + + List ids = new ArrayList<>(); + for (Issue i : issues) { + ids.add(i.id); + } + AppSingleton.getInstance(getApplicationContext()).getDatabaseHelper().trimStarredIssues(ids); } }; @@ -609,6 +619,13 @@ private void loadStats() { } } + private void loadStarredIssues() { + starredIssues = AppSingleton.getInstance(getApplicationContext()) + .getDatabaseHelper().getStarredIssues(); + Log.d(TAG, starredIssues.toString()); + mIssuesAdapter.setStarredIssues(starredIssues); + } + private void showStats() { Intent intent = new Intent(this, StatsActivity.class); startActivity(intent); diff --git a/5calls/app/src/main/res/drawable-hdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-hdpi/ic_star_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f4933d8c2e32722ee2c6cef22e2098bd1f515c93 GIT binary patch literal 735 zcmV<50wDc~P)DLL-W_3n@QC z68@*h>+N~IozM9=$Ih>Pcj3J2)xPKR`#j(8^L@@*TAKPF6++kw{ocM{Vwfw!+ZRL( z(gEKR9p0b27-9r|B}TkIS1~{vyfy>ry3NPsCYtXv!(P))L6Ht$K-b>TjtY>&B8;t3723r#MPO7 zcT3c`T_Ua=8hFsxC=vnv@Wv!*HEzKaoP(2a5O%?a68Rfp4;+S5a6ZJNMT2H5E7YU1 z^N+wTcy5xf!!jRNsmNUl*GxUt?(%W}6bUOs@$&0AsQRoTXARslb?&IPkE=)_9t~5b zm>$q>A6HJqZi1I4|1vD`aaAeAZGJiw?*9ka;p4oB8Gv^wM?3C}YWcXD72<>ZJvEr~ zcnI;c_X_bHrr3|l_5Qj=(caWR?Dc*xVs@MO#-D8zJ(`N^ zSz2xEt3o{2gtcpzX3yPlW^b56e7ULkv-DZF@Cdw3cA;z8{@fz|K1ueg#nl?15VyRF zUw|#}zzm|5uy0|Vdz(Yyu$}ew>Qaa&ch*dAS=;<^i2nv{gGa`$n5X9RU&l<%qS%lr zoS_{z9Lx^Vb+To<(X!vxtV!*N*b{c}ki;yp zVee!e<}R1p%cU?6eh_wM-y03PcgbXi`i~-_8Bmq$0~3ZhV&wWjgh2}6&7&aesS86i z!M8_K)>9P*$boxnApV?_eW?lIi`FncOR_IDA-t^&)Rujz2*DNbr3}Pt71`f+A#_g} z#%Evl_e}`Pf+BcT2JztLr&*Z|w$033rea0i~jrxhLq_i*p6xA%mM z7kjezGMTKhoa0w0)+qchPns7{lXLtL8mizy*_I@(IDd`(qFsmyeeB#!~Izjx|ThmTs-S%`6%yunf{%Q^>q8Bdw0;0s$g~`R62@r&0000Col=7k3CX%=?`WIsRuLQu|Cf{wKi9WWX1P8EH=( zM0OE{d}`W7X-^bHdubGM_gxU*@1><*V!*nYa24Y)H!1xR0}49!7Nm})Um_sNXHme1 zw;&$NXQh9`fd#y2D5kEAFArCNxrE+l<66jCAEGVCkk>jD;JKZM4>8E_fvVGT2} zjr#*!PjI~fAHjD+5t8h~zSlZd9cnGsWNmwz%DHm=vW_a?G*15iJZ?U5PFcqfz-bV? zHw4E`&JpbVBP#Tv@+*T#Ol0jspUmqEqWKO4A9=+h^N6)&zCh4NgW5HSh9ql6JX&;{ z+p83;vwkCQmMf9B0XI<8EQH?-$!hVHW2IhXV5(ao{$NO0izSYgdXa%CA21{fNT1Cw zEU+LKyorKREl9n{(C^JMQBXGEeH+5J-b7V$2l{p4t<;MI2=*9~I8VYh=s30L?jYTXJZ9|1DYs@MKy1S$%#UV=d_H;D=J>eYDAl_33l05P z%A%KO|50iG4S19zh`Z3S_PMl&0?}MMl{Ytg3D-7huLX{AVoR(g?R7&>ztttj>jjGG iCR*;4<4rUXH@*OKkg7nvHJD@o0000F9KsEhDc4#XfDWjG3MjU-vcjB# zQ|Dh|^sGacg5Jd#Uy!WKm<~o~LnW}Fjqf^S6uO}W%7R|Gi&p4`G3}L%WMxK4IQxq* zC*aljoiteAik^Bn(afavW99s=@8A}?tRD%l)A{!yy*<{?DFRK-AIBHS#Q0V44Cl~n z{X`vhycK9^H=ijM#i$5n9u*Z~%>gCkH@kk-rvZ6Uq6X+LiMk(zg%C y`FAAVB^+Bnr=0(!&;G}DfD_q}HY7KZo|7BA7ua#dCxL+{rGb-YT1 zeycj_-v1550lp`KRVp*^z9cMm@ikFWrgppDvlasFu=;71shzgxvmkh%D0C;D%Yxuu z@pNA3PCc6i!Q(_(nMagr0DY zmm%@T35$26*$kh3z7_%pc#DTVbF@?JHhuO_7GH&es&s6Fv55cx002ovPDHLkV1ja3 BpI`t0 literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-mdpi/ic_star_yellow_24dp.png b/5calls/app/src/main/res/drawable-mdpi/ic_star_yellow_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0fca0f8cb178b8103eb225d932c57497c4a5d233 GIT binary patch literal 391 zcmV;20eJq2P)YU7{zPpW_9SOxLQ!~0bDwC>(C`lEQknwfKH0gDY)oUIJoIv2i-ad72oN2J`>vH z|J;Hx>|cZYf`PVha}NqVgJVq0@^@LVrx zm?F7E4fB}5mKg^c{FDw zG_{d`nq{({w)(x`mhT;bqTo(_UI4YNbajr<{0`LX1&#ZTuo4aT)L#jYrzb%l)HN^j z3WZk|_0(SpO_NN(18{b@tl0ywu|<87^?JdTKGFO}^<6(sdPl5nj2JJ2c$@ l=et@{tS9LWn_BzFi!au3Ejhy{fHwdD002ovPDHLkV1oZJx0Cl^y#J^2`|O!mQ`?&zH#0ba`QQheuIj4lY=6ZjI)XziI7irxi&1?;x=ObZ29f#+%gFF>{R%dAlBT2*{VkM+x}Q0!ID0z^s1z&h|r6}$~>SAWx1Yv*M~LBYCME~wTl zYKNVd38An`iEfu6Wjn0KpMvRnZYG4HR;eO+h})H|Js1n^tM%N}g@n_@ZHIYaDd++H zU=KJ5&VXmC!0VnE`fBBa?VPx8W-r(x?%A;nEC3Cl(#D7-OzZ- z^Tg$%t=~j^7nl2*Lj~gJ ze(Rf*5POqEw<{0+KGtG=W6Kki9FTGknMaHz?n2Nv6?1O3zGVr4I>86Ch|}_~U#mxm zQ7vvO>DbJ*-1<&R;;uK{XZ==cQI1+1}t#RT6jGxv~q zo*k)5+;2W%0lYmLtWPnC+xz-@USfSxmqc6VF>5a+iSGXaYfoKBdR7(Sebd7D3}VMA ziMH6I)}E@woq^Y?fL@Oe_c`AWcuRG8>>Jd4UIK|d7)uJtS|$3_9KS~KxdogzcEWG0 zMfvd>)jsn>Tk1lxUX_^LC%+MH7ycT@W=|Kcp^ZLl7CA?Er^&PpafD<;Dlz}FE5JiF z7Q$Yh*m3%@Jz+Z%jt$#9sR_v*sKoE3aJ#UVVSCMY0QNfkY2AxXCt@2z8CrL~tU#u9fk zG4@PrPfX$(xIg!}wM|xx8N`m=mgmZqE7$+mZ_Mc;m%ke#3IG5A07*qoM6N<$f>uA+ Ag8%>k literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-xhdpi/ic_star_white_24dp.png b/5calls/app/src/main/res/drawable-xhdpi/ic_star_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e9266d9402ad2e41768b4bfe2d52d6192c1587d6 GIT binary patch literal 706 zcmV;z0zLhSP)SXCYRVu%3$?RIAqv4@nH0gwpn`%}rL<5|_<>3aJ4I8Zuu$+DRM1id z74?6*p2N(8=XrN^GjAtv0(;;GVdvg^&cbZoynRDMty;CpCNnzx&aYUU!0bxTf_*2?6(juTJm|TpQEAVuWx@PH5$v_7x!n+Xmh`ft5F` z)&7ACp-wtst2m+kSp~yk3;X*3I0ojx8E_d~1^2)^CukL{We3Hh2i0f=}Rw^@hj|J?YI14=iL_)Vw`H(KvYQ3>-9%z_{jhg~AaFM`0Z@C~kof z&G}DR*!Ne!PiNp}!B2E%NP8YAG%wiTo`D6;lOzn90iPX{T+nMqbMz$)oVLHu__^S} z*lG1|L>RmeJaJ5$g0uIlZ=-_2ZgAf*?-$P8rG8mt;oQSdQ4Ns_XKh!Xtg`UVM}wrY z`R|Ub-qE=(OFBQhV7lrANo7^%XO)F#;G+{H6&~8sKW#TEm`z#r7xxr6Yf62x31;(7 zh<=$@pKOBJiW9)&SwydUtf)^m!R&<-pc|fL&RTfIxHJC!zq8a!^~oX_O<462n|t{V zm~{Fk<670T!?NV3l1$W~t&Ro};Mg@aW@EyDY$8|kboCRLT*`vDNm@FLN_{&S} o?NV2q8D}5XwN|ZKwJKMC0B_dD&6kZYn*aa+07*qoM6N<$f-pHt{Qv*} literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-xhdpi/ic_star_yellow_24dp.png b/5calls/app/src/main/res/drawable-xhdpi/ic_star_yellow_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f6dc3d49873c08ad15651f9fd611d5c3fd310259 GIT binary patch literal 762 zcmV5Lp6dk`>P^eP1%Oau+b?2fBQ7DRwE~Yr0_*xvQqEK9Q=|U;^g_bVdDcVIBE)@KR zQE-+js968g_1wHDos$<$GkKj?$brM8dH0=jlD;H&GPPQT3KhITqz@!%n1t|0iYgjabyXo%d}j?f?09Kc82$92I1fzPf9pD;SZ zb-@B*mmLSN%ymHmVGn_;=>t$U4|9ERK+v1%;D2ataD7lf$lc)Abnw5#SZj#q1p}<} zmLoKCmgfZl+$Ogo+i1&B^T>>l_S+t2aY0e?6`_@;VxYzFg4 z;!M#L=S@N6@*WgFbqMyE=80zGyiQ=kfNh0Yq+c|5@j1Xb{|US9o7XV$XIgN>xN0*L zydD$~nUwxr1CyMm5Fj)Les-AnqI!*Sj-G&jmct!Hg#}TFwH~!sG&el06qZaFX z2aK1}K?-w;^}QnL{XaQ^6lJHUr|o(H!%@ln;$DcVHOfBTfaa?12+<==oqfCkW((;6 zE}9pXyx&E$z&_pp!&m75UDRIYf_=p}x5IA#x0ia&K3)K$VaaZ>v6jt!k;X`RUSq_L zWnMd~>HjUZ$jrFI95gQ_M+d1jNv%U;W}NFw2h8Wm_zNCH7iAsanC#Lrm+aiGlQ7S< zr2{4_iJ>l+Mb~o43%jhE53E*v04rQmDnup*Ve}n*gR_2u$BRO>p!wEnPYm*SX|N4k s{L4%3<&qbwX|<=1@K}Wk6)J>_-&*Mc&|t7vg8%>k07*qoM6N<$f}tyM6#xJL literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-xxhdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-xxhdpi/ic_star_outline_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1961c40fb8e61bae78593d4caddd6de28b2b7d30 GIT binary patch literal 1545 zcmV+k2KM=hP)eRLu!eJR#a+OStKN86INyg@+vS1n@iFtDw_~ODhZlxK*J`JCK{<|q=9

975qehJyHEPr-0RT=Tm-_b_ z85o>LMgLx7XkT#VlE09DkaN6z;K875B>&5}$;$^C49H~it3rVE_hBwKuwXFO6oQlU z5|IjdM#UxH4qPdNWB3dailO}>?o+fb~l?|@j^KS(%!MMC!SgxrVZp)Nb& zA*T>S>!O6y-;vW2I@7Z9LGl@L5BV|qJsMZ0 zocDO$IaqdQLSFm}F^_$Y7>du44`=e%l55Gc$tC1GaDjn0nizp^iGUy}dDk6-`0w#MYmP$yrPD zdE`=Z0b(WUY;1P`MDUbTI-XocUWf?1Z21k1cIJEtWv_ynF}I@mq`8-z>w4o2M2}D9 zxJ4~2w~>=vuQagoVevRiG4RlQe#A=kc)~bQOMUq(#?ZcYb-ueVYs1?WpCV_tUQdu2yQPJ(+DDbM=NQ`m zqwGkulm946$hF;LjVlo6w+)CrksB>4=d-}|ItAi@oXQo6+Jb1vb#3o;(4cXv5ZOOB zUfk~TodR*l^m;|@sxNl=N`i)-ia7DR6YE^IQ?QOJ6ZNXCiS=}k2EUeYH)VF3C%bcm+ zxTa`Rr9k8EO&Hva8cug1@o*srBJU%aW|ssh-tYBP256qAaqcD;xqdT9Hq%M<80R~# zUkT8#nP~q@YdGl@$e0eTnQrP8Y>~2Irt9_`XnlvS;iRkMBV4ajATk9?@3y*fZhPlH z?!bZn5Lcw0%q({Kg9T#Py_9HA-0bo_2aVcgMrtTrhA|GO(Li-)Z500*Pu%UYJq6-c zBR@PUX|G#_aeI-9nE%vf{%%0FROeO$@z_c$jGo-}?7*1WAsZB=u|10F1`yqR7+oAr vqlJ17;u+3rFRM|bMvWRZYSgGvqcr>vzGVjCtsCQ>00000NkvXXu0mjfzXACJ literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png b/5calls/app/src/main/res/drawable-xxhdpi/ic_star_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b422a269ca2f6c10ff59dff25f58233b17c0351f GIT binary patch literal 1106 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 bAV|W0sWdK65=e(%00000NkvXXu0mjft`XfF literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/drawable-xxxhdpi/ic_star_yellow_24dp.png b/5calls/app/src/main/res/drawable-xxxhdpi/ic_star_yellow_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0313f6627f25266aad83c990cbb662879156dd6f GIT binary patch literal 1571 zcmV+;2Hg3HP)b!5Xa9%jgR;s8bysF8YMG$=@Z zP!kn{A{?Ht;Dv-3qTa**sr=UT9G*43d$T*eGt+bRfiIK0o$0Qs-SpOUSI-R$D2k#e zilQirqId++mYaxLYvk{hf*=atg7(SZD+NH*SONV7orG4(*Ofklpg#@$V-!9qUsw7F zf_^6S(|>P3<5%cxd7jcIh@yw)1%FQW%kz{zKs2@lZ@>Y|8}K>Nz-jV)#W6(9>k;f} z%NsDIDQN*9(63v9Kd0UDe8nL|+b=|rk6QviC#0mK=gaF9M-T;DEkPFww#w@i2ariU ze@q8FrEzGfyk5x(GM{@a!EUDw@_HpF2!V=(x#OdmC*`CrR2x4dnZbn6sY)|O|Gw&0ApAKwR z@wGe7knJiNK@iuI`9ie>H{&;-P1%pq27F>4vjj1(9+CYh7LwHS8%qFlirXAp zBKupk@cJz;o)C>(jsUGifbK@dGQ{I`I(SYrYub(;hVG@fPwty-sL5I~K4GWBv6acX z?K(I-2xnXP_bwdY#Lpk$_$7Xxfc_wp<=EDDixT(EHn1(@uk@hFz$k6u16YO6R~eOrx*GS(cm(Qw~tEWeHZ&QxJ>$6NhnTJ zqvxsInNC-lfiKTd(P^d&%w$yKZ;MmD2)2jA(l4)|c%jA1iM(TMyY$CP@IT>3IP|l{ z$*O7sS=|lN53fPqd=WlThb_)lOl;$pOQij^ASpL-Q0>+)g&z`aI#1eNE6loaIF@$4 zbnPj8y|*mLtgy)dl&$sB&f1dPBgg=htzFX2+EUT!ii6V5T9SMbSFy_CHo8z|SF-=Y)+((c*-=iW{`Ts1ZKO1o=;sUwQZ*ey<1N)x5l`Sc4ob_Myd zL^;hnXQch!L-EFil(Tt+Y^wQavVXzlj!GzaK-%v;aO}mjqdjQ~L4S3Ac?iYNk&f## z9c5VIOY?2_9<$TN#m>j@5RPkQ`;6(MwT7IO&$F!#cD7W7WS?1{`q86Yosi|rk#D4u zYK%O4)=pKv0IM6|&|MZMvuN7vu57H3Z7u{~lU&~vK=oWGXZxZ?O;lr z!R+a0Nr-v$adR)lnN+HODZE+toh94w4lZ!AI48ulIKj<%hnuVg>v*#BzVO0V?lbATL)m21lGk|$oOmzo7!Nn$KB~YU-(efbl+#;o;-dHE`QAb4 z1(@%MhVPW;l?~fuDV;nb&+`hRkt^pp!x_l7DsOT~vL)CU|7onm?$K59Ja0%Q%8=7X z@Ax#sXr3b!51nlLkbK=6VEhxvZtf^5yK#w`TVmVw>AQ-eD2k#eilQirq9}?R{snBM Vi;lA6Yd8P^002ovPDHLkV1iKD7i|Cl literal 0 HcmV?d00001 diff --git a/5calls/app/src/main/res/menu/menu_issue.xml b/5calls/app/src/main/res/menu/menu_issue.xml index da855dfe..eeca417c 100644 --- a/5calls/app/src/main/res/menu/menu_issue.xml +++ b/5calls/app/src/main/res/menu/menu_issue.xml @@ -4,13 +4,19 @@ + \ No newline at end of file diff --git a/5calls/app/src/main/res/values/strings.xml b/5calls/app/src/main/res/values/strings.xml index b4ae5126..9b7bc129 100644 --- a/5calls/app/src/main/res/values/strings.xml +++ b/5calls/app/src/main/res/values/strings.xml @@ -635,4 +635,9 @@ Categories: + + Star Issue + + + Unstar Issue From 02e9998cee122c6370173648048f3c1ce2381c16 Mon Sep 17 00:00:00 2001 From: Ben Rericha Date: Sat, 29 Mar 2025 04:51:48 -0500 Subject: [PATCH 5/6] Fix partial transparency in star icons --- .../ic_star_outline_white_24dp.png | Bin 735 -> 1078 bytes .../res/drawable-hdpi/ic_star_white_24dp.png | Bin 548 -> 831 bytes .../res/drawable-hdpi/ic_star_yellow_24dp.png | Bin 596 -> 1023 bytes .../ic_star_outline_white_24dp.png | Bin 456 -> 589 bytes .../res/drawable-mdpi/ic_star_white_24dp.png | Bin 355 -> 494 bytes .../res/drawable-mdpi/ic_star_yellow_24dp.png | Bin 391 -> 569 bytes .../ic_star_outline_white_24dp.png | Bin 978 -> 1320 bytes .../res/drawable-xhdpi/ic_star_white_24dp.png | Bin 706 -> 998 bytes .../drawable-xhdpi/ic_star_yellow_24dp.png | Bin 762 -> 1173 bytes .../ic_star_outline_white_24dp.png | Bin 1545 -> 2385 bytes .../drawable-xxhdpi/ic_star_white_24dp.png | Bin 1106 -> 1737 bytes .../drawable-xxhdpi/ic_star_yellow_24dp.png | Bin 1183 -> 2016 bytes .../ic_star_outline_white_24dp.png | Bin 2156 -> 2789 bytes .../drawable-xxxhdpi/ic_star_white_24dp.png | Bin 1473 -> 2067 bytes .../drawable-xxxhdpi/ic_star_yellow_24dp.png | Bin 1571 -> 2418 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/5calls/app/src/main/res/drawable-hdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-hdpi/ic_star_outline_white_24dp.png index f4933d8c2e32722ee2c6cef22e2098bd1f515c93..c67e2a7c9df7a2fbd37f8837a511bb1650d17af8 100644 GIT binary patch delta 1058 zcmV+-1l{}J1-1x~BYyw^b5ch_0Itp)=>Px&@JU2LR9HvtmwBjFWfaAKODk=lsHAzI zqKq;K8c9;fKeD0{tdyuf5=;G?k1U&L zplGtp?YCl|c-g!6oO|yhAK?d=^X`4$IeUF;@4faqVwf!rGk-k%KLJI=d1hMDnqC?2 znW2c-6L=zlTrKI3UO){6pfiCN62#?_-q~eCbLK^~6v_911)K zj86cofvJ+d+Esuq0-gu2s1t}>&o}9vceBGW?B|?L>vv= zlbvLi{C|)cl0NGMQA8XCJd%fVyk~)%C4D;BbLzV6pzNY63S*;E0H?cq>Vz+a)7|)F z0b#-1nqc}Qeb=bV2HO-7`}joJ&Ie~L`TGh<+gjXXnebRyoVD|99&E9sU)nL;NEjo+ z>{wSEz>?tBo-OI87J&8x9*$y)_<60;mg$~*aGiJ-|JXRew72Ov0Zv~DBGisK8Pw{Nz06GD5Be1Y&$2Y)~O3WhSNJ~P3 zGizItQH!jt$rxa+r2Fd9<^MMV6cMA#IJm!zgX?oX+0RgU{TSp3B_lxmE_LrjiHFJQCnw5Y)h*2 z)IGTRe?&Nqwi#yZ3`sU@-7}Q$Ue=oR?W||JASs-umzRMpb?NklDLL-W_3n@QC68@*h>+N~IozM9=$Ih>Pcj3J2)xPKR`#j(8 z^L@@*TAKPF6++kw{ocM{Vwfw!+ZRL((gEKR9p0b27-9r|C4WY|KUXn88@x6H>AKCw zk~Ttbpa|TDFTm ze%?g0MbHUfQuA@+8&9^cupU}%Zq=ed5A1{ka01T4B;0`e@CrV`kJMPVr^n=XCtK#z zip|19xCxhFG=Id}>Y-k}c7`J191MkTUI}+g)VN(Dt{fV8(AOvu0sZjCBxyBn!4#Z> zlW-7r!G;p~8(|L|hEs4p#G^%nW-BYyqq6glz%F=hlCQ%uA6Kc!T?*GsJ=N~=asLzv zD?{<}>p7_UtRiO(+%t9VsJ4%*NFg2#Q>K_6&~6`BPJhI1f|n-$GA!|NRVl=6emWHH z{|DINHJI~w2=Ue^Ryl{fziv^qHN@3XlTq*Y3h^DL z*pJHf{<=lc-qb+s^?om6cANOdpKTO9nu_aLT5asBLOj=mwQHAV&)sllZQaa& zch*dAS=;<^i2nv{gGa`$n5X9RU&l<%qS%lroS_{z9Lx^Vb+To<(X!vxtVPx%`AI}UR9HvtmrJNkVHC%Ie{Tj9MM%Pc zlu{na4aEQ%7{Z{X zW4B*tpL4m%s?+Z5$NGNzzt*?b+M`lL{y0zw*F|7qZ1F3=lCohd9WpbU1>6Ao#DKbhIg)OdQK=M=nfY_4fE6i= zo&i=#vRa`sfq%@b7vOcqRq$iwHwowfMx`wH8dw8720X8-e_fJ(rh)zj6v8kL7z_-_ zI1Udm4xD7ZphLX_J_4UIj?b&Z8wZ*R90$e+HN4Jrhk2cH)t&)sCEckk5(o1C3xFfQ z#O@%e^7#bV5N&|Y>Re0AAv5!K&JyjZ)W&sjbS z6-G02b-b>$hjLI0mv4K2p$5K4wOW9@v!95h z_q?jbJbz!Bi%tNw0Br)=Lcy#B$P3^$Ne7EOR0zn-1^|bmcCfC9(}a7D0UITK&3nEm zkoT_Bz`PWP-m~2Nz9hQ_tdvx_FO{n(&;-E8Qy*EY&3jU3)R%UKlY2tziT6MsX`3WH zZInVj6<)4#=0n(SmIuAJMkDU~50s~3k5lLuzY*dkN7Wdg00000NkvXXu0mjfu3diw delta 524 zcmV+n0`vX92BZX#BYy$wNkli;ypVee!e<}R1p%cU?6eh_wM-y03PcgbXi`i~-_ z8Bmq$0~3ZhV&wWjgh2}6&7&aesS86i!M8_K)>9P*$boxnAb9i6SmEg-Su3*|wf}+xp ze$FEE-YkQnlKlHNOgl=D51+uWQ`nJyPJ-d265?|~=6`3m2MN7%;L6*3 zDeJKWqdb|*Z5@otdN=VNZ!de~WxZ#S`S%y)dar`V1Q?g=Lk*R*egIg=v>bsF#%TZm O002ovP6b4+LSTYCHum}e diff --git a/5calls/app/src/main/res/drawable-hdpi/ic_star_yellow_24dp.png b/5calls/app/src/main/res/drawable-hdpi/ic_star_yellow_24dp.png index 4135101e8d572c1fd3d3ddde9c0b269cef3e9039..f4bde0a917dbc3003cbee5225e0976d302d1cda6 100644 GIT binary patch delta 1002 zcmVPx&xk*GpR9HvtmrZC~RTRg6=S^lZ5ltl1 z%ruoEt%xEBLbN)Wrb@f0!9^EZ1!)&<%%)V7U@b1hh16pviJyyzFIErm4wU<{|@V<1rhNMZ_)OYEEUjRBfT3?qC3gem}elpPXH zp7_^+yl`cvKYv4Yd)470CyDew<~MA{Vvr6KMD%V{jsolI95{vOZd87x;N%Gh z@>~z)iT#>~a|IDhJbwVR1cE@IRmm;w-9F`Z^oxjjM%JXhUEEg<>*h<`DY^^R*g}A9`5AU`Q0Fg%4OfmWtZ&@z#eEe z@jP&_(lA?LavR`2=}W$Cv&jlbFFg|G=G;4_aqz5-(|_9NyZjM)PBwg*ZMNSI=*nP} z03U)pT*u)|<$bjFcm0YYPs-YfMZ3COc0lRDJ8&ck#Flv~qMSl_*?X_NhOn*13`}D* zA%C%n3oD~gI=&sp`Fx490x(^g{%?^rW3oQA;PG6JcM*0*N>lv>pug(!X3V1!OPyR9 zpqatf5!qL9HiyVDM8+gCey-L5ni;wW)e%&8{aux+2PHc3(#inMCfw`61Epbm8j%;t zE&R}|<9Z!F)O9baZl0P2h;?RBYy%LNklCol=7k3CX%=?`WIsRuLQu|Cf{wKi9WWX1P8EH=(M0OE{d}`W7X-^bHdw*#Za`#;j-|wZRUt++z znQ#^3FgGdv5(5f4_7tPKuv5or!Tu*Sl0UyD4LlKhf!@k!#Rvl_B)?{sa zn##Fy{j!cK;D0nu{{K8~K5kFd! z4g?>0#Uk^FwPn6Q&_{#XHHd~JYehU-ber3&6s)s;BX5=~k+%UiP}D4h-werW@s(qx zUSwdZTOs~nNLY&{j+J_mfhiv_BnwEN%`YslAQ!xef`3viNWI9=@69q%P&VLw8^X8V zL{)MJ`gP&0)QbcN_85{lRA>4#$Qs7)Q?I>Dw7u0UbwdM!Q-&nyIJM~RAl->PX6(i( zw`L?jY{MnYk7kE_K6%*Y__*FE)w=Wx4gFZkqL*m@QEC4Tc$6cEyU?-rxwMA@(Of%~ zH#d6;*EKe2uLX{AVoR(g?R7&>ztttj>jjGGCR*;4<4rUXH@*OKkg7nvHJD@o0000< KMNUMnLSTZd7zdgF diff --git a/5calls/app/src/main/res/drawable-mdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-mdpi/ic_star_outline_white_24dp.png index 4433becb28436f4ef846d733b9feaf330b80a7b2..13c20a9239cc9e1c2dbeb2162630651ab2c6c818 100644 GIT binary patch delta 565 zcmV-50?Pf!1I+}GBYyw^b5ch_0Itp)=>Px%2T4RhR7gwJluw9_VHC!HPr^nSiG@U= zv5?qUD%sFvMJ%yF5k*OiEaXp`qGmERY_KF&n%J)bB&hwljX834^1o}>ngVVnV1LiF18gq_-eurrl0Mdf z)ULqxAaE{&o|bfe+5om^18;z@8MF^rA?a5yNUaKN?*wiG2Q%O(uuIaN#sJ#^oexCM z7v=L5&<`xlfbW3`;6j0h7N7F@O_JN8e=D$k95|9e=T>AkA}PLOdl)!eapy6EH6;YE`%nIF|7)0)wqe{?Wkp{!+zN-~%uq>1DS* z+g<~V14~Nwha_FAY*G75+gnrA-@pz@kE$THHv@NpSt1{_6 z%TwqOc$=hWRY`QUX(>N!H~{o@dOl|(=3>0GF>G9UdVc{zhY)vDin}Fu(Zl@x7+78U z9{q0yu)Pv^m0lk!vvCF3o>A@rM}Y%C%*ZN9uN$?Y;TV)U#-mV(~J7+;XA%$N>FXG0~hppEZ3 zWE8rg1^N4{Civ zu-=0U>5XcMMX1{OQ!x)2*w(eMrL{R-*Vues5gOL;EZ;56Ag;B;F+)TPQ!Lod2(^LZ$Vrq(^(pt@p1) Z`UH*3D@R3aXHNhC002ovPDHLkV1foH((wQQ diff --git a/5calls/app/src/main/res/drawable-mdpi/ic_star_white_24dp.png b/5calls/app/src/main/res/drawable-mdpi/ic_star_white_24dp.png index 053656f6e4e24d63257b1223736410cf94896ecd..f44f407330542290996cf719519e8ca95e25962f 100644 GIT binary patch delta 469 zcmV;`0V@9E0`3ElBYyw^b5ch_0Itp)=>Px$s7XXYR7gv;lrczFQ5c4w7ZN9lkOEB_ z%q;|m9Nirp)6raXk=#P+7l%kA+KiT3ve6nH+#78W#4Q^_4HOY^3WL{s$x z{%1Mdd%yEN-*?{kexk)oEzVCC!1iD$NYZ+0VYz_i2zY$$0Ds$efS)n(JxTj1kmL?* z*MOHX>71m6YXjJB1AYKKG3gG_E9tZflGK6iQDCJZ*_foy*#O%CdJ_nDemm~Zfrkyr zz5$Cs(BdHO$C6wh_qPMvPl1`3w7sgbOTPb(uq8=v&K*|<#>#_m&;BuadF&NXD?7QM zf$gcHi+6=%ZhvHg{uI?uOM2h*it1n59*&}RBtlMrAo^Nk{G~3kJx~a{3f!%L>;fZ_ zHk!p-Ox5;?mYqa2Ic(&aitvnRJe@>7T?41SJDk|;-W{bi0sc{6v zA9Ead4ICD8=|M8U_ATHAFfZxoDjlj~lcs5+(D^p~pTyMx=7BL{00000 LNkvXXu0mjfJ4@d^ delta 329 zcmV-P0k;0`1LFdaBYy!ZNklfZki!vVf0f>kOr@V+E0cJVb)Ql@sh z-m?}0?Xdc3mZ_b#=d&PqpD1)Ep38#ZUh#BZ=uSPG1;OJ)S(!(kuY^$FNdHg@USdY=g0h00000NkvXXu0mjf3i_Rb diff --git a/5calls/app/src/main/res/drawable-mdpi/ic_star_yellow_24dp.png b/5calls/app/src/main/res/drawable-mdpi/ic_star_yellow_24dp.png index 0fca0f8cb178b8103eb225d932c57497c4a5d233..1edab639eded4532e87a9322dcd01ca44ecb48dd 100644 GIT binary patch delta 545 zcmV++0^a?H1Gxl{BYyw^b5ch_0Itp)=>Px$^GQTOR7gwJls}9NVHn1L&+Z;kh?CnH z=T8*qL?S_9W+Y05(kY$BH5WP&P88x?L`O8ILFtqVrNquEkVr&_Li{;1dvT%=Zg*dI zvwN4dZg*$ot}x~IJ>T&ay<3X{rXe;jfCAI%%bj0v1@Y_XHSGO#!p zneXBjP{;_X&R0Jwr!=|j6}2u}6dY-Wx;`c3JB`pEwd*@hkwxBKq=&%P9*~ci9hF;t zxty-+m|7*6!t7XAfb>Ac(oiQ&cR=ia0yg*P;Io`?OMhm7eergZ)0J)5cWQvm1{?Whmsz7r>MwommP0RX js@F7C&>9^?|3Bb2Rhgz46(^iF00000NkvXXu0mjfGU5e} delta 365 zcmV-z0h0c?1cw8VBYy!-NklYU7{zPpW_9SOxLQ!~0bDwC>(C`lEQknw zfKH0gDY)oUIJoIv2i-ad72oN2J`>vHP zAzf0|{op0@hE;Fj+lfui6}eO>^yt#oyc z(EJY6>jjPbj%KhD4foVv36G~IK_ApLFY^k8R~GfuUkOcM-2msiT2rhi=?$A&`^Sqf)^RO4!zX|@00000 LNkvXXu0mjfpu4q8 diff --git a/5calls/app/src/main/res/drawable-xhdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-xhdpi/ic_star_outline_white_24dp.png index 777558028bc8f6058411b47b96e957948b441977..01d61019196996affeea243748e7c78d071e5057 100644 GIT binary patch delta 1302 zcmV+x1?l?I2dD~=BYyw^b5ch_0Itp)=>Px(;z>k7RA@u(SZT~%Qxsjxm=Ka0YKmDy z{ZLUu=nqpwVro&*7!pG(LQ6F{5W`$J%>Bm*fPeoxf_;sEr11tw^38q$ z?Kgl00pQGG2SC!606q)HcOdy)KS1;?0+KERaD6y^ImsJ_4FE~&0r(ie_TlvB0Cpky zcdtS8B?6Kr19&8J_9T*z4i^9~0XR5wb}7k2)_MSv_5$#>ch3&ajwAVQFG2J?g(Ter zU|Kl&QCxS8>wi3w=d85=By9%33wEP$a%Nm_iR_-BhU7m(_P)zPYo%AxaR3%4ACD*b zRsh%sK+1g;~{s)r(4hC`n07(w};hB?L0C0+w%4sAQWdKeE@Ia{o08X**GjK1EbULn*P5?Fq z;EH)f17qpXZvgB_@{bI_hC%Keu{QENfXO6(SuKFb+4TY3T^T$pvm^jk;IMZK|8kNp zWCKLf-hTl0i0F1oL%;I`<`a7#fOARyl`HMK1|<2vD=KAICkjo*&L`<&)pL>LB6lYM zlfjj9S^ci6p06e8`vEfOB9?SI0O#EX$=9aFv%4v6iYzAUIsm5NwfqTSD#`m-r*BXI zky3{OcnrX(MA?H*u{_sXIPbOL6gegN_GbVmkbhhW3Hb9IGW^pB|3`%1cvgviZrm*+{Nf)SMk+dAZ?(xATBx@R8tfO@bMFgAzP6f*Xl6loOjdn%%$=rYnDrtUF z=@(bkdr~9MV{oeoMBy==Fv+vH;Mk#6B7fBK~2m|+D5l2jBNop zUA%qPGM1!M!n3{|0C!v`Cpqpl@-TpzB)^DpU3D~xL|Xu+-1EZF%GnG4av^{#0c_I6 ziC+O+Q&sfaDxPItl}2$|PL)f5v<2Wp+cUy|J1aZnbaAy#Wm!Dzm%VqDodLjr-G9kh z7Lsgy2;3Hcd*9u{uxYi|LaNKB4zrUe`IyCI&8HT%IISE#cX*Z+RTDI(WY*I$jR8n< z_57-fAv?7Yz@>Rjh`s;Dh+H?j+ccpO_Mr`c6Qg6xF}xGKLS5WCVw5x?IRCf~1Ke?$ z^%hGT0CNCblvr?w=B8tA>FINvUVl%IX2~5`Ew@%JA^Vv?+iC0JuAw zL((l@&qR`2R;SMrlCPC2ZUmrI>6#oj0$@$fb|+gS5g3WU5NF^&EozQHYY)|l-v9sr M07*qoM6N<$g0?zQ#sB~S delta 957 zcmV;u148_$3epFVBYy*#Nkll^y#J^2`|O!mQ`?&zH#0ba`QQheuIj4l zY=6ZjI)XziI7ihte(eg*8d_Dl-}SApkh z0WUzc^~{?ZPNRRc)tWfM#&jPMlzf1~+wt=6X1&~G7KXXEnM^wR2z+?6IQR|;6 zp};!uNfo>eY*&BNR%_>FMnS>4ST3m6ENX|HmkFV;N{MclA!R$P#-D=edTu6!qE@LQ zd5GJUtvwhE?SHHF+|-4H)5L9ud0;8%0sUYPI0(*wXR5&Ko*4RS<%8{Ga2LD*-{f!dIIQ!;<)W?MM0^*Q`<}R3PJ%ugw?J^J2Uk1+ z)y^>zkAidy_=BD-ZrY)?$5Q%M+9wka7>1 zM~o%zLeMuAb8fc2WeI^g!3VR5)AFxht4D}YEp996*vz%u`c6vXt~cG|lN+GU`o@*G zr!)_zj(^E3w$1t`A_SfdZkvRUK&$mFCCr%%?weRV%yX=7qC$dM;%*XZ==cQI1+1}t#RT6jGxv~qo*k)5+;2W%0lYmLtWPnC+xz-@USfSx zmqc6VF>5a+iSGXaYfoKBdR7(Sebd7D3}VMAiGQ}(qt>3P#GQfHs(@aP5BE9W4|q#; zdF&h1d|m>HJs3+0$yz1))EvJ?@wo+@H+I5rtVQ|p8r44YLtE-XvR;*#-6y{hZWsO< z$7W9#uAz-SY!*33cc;m;4RM5ILn<-w%lM*fo>YWHjS{`XZBeH{vu9p&V6%%2Vaz5wFL5DB zw_c@+WDm0`X?@N?*cmMM{#dhv0H0#TWe=9SH~K(zKKg*3(aKQ3j8&q zV7tT>=ZZVX;kLSIeG-+ptCH`nV_>DVmo_WL5_dB(_DpL}OyU~2Kliw`O;(H<#E#vT f=gO5U*ZPx&ph-kQRA@u(m|cifRTRg6e@!0}f=L}x zP*M`i2Ysj%oCh=MsgDU8VP1j?6|o^GW)wd_1Wn4AAS$GZ9PlNupecP4Qy&Wa0`)-! z2bF}BvJV1#$Z~mB?19_y-h1{rbMAF6%!XkO+;!Lb|IXU`?titGXz`^M*Uvb>{mx)R zGhk*vE?Abhr@Um5|?und^lCg7bQdb6ZmEdyX?4*-{e zSwZwQV6LQp%7$o22F$Dr*q;)+O466D0&o;qmJ)kR($ixez|0l`XZ+W*ir7Vx&XoyK z`W7;?Pk}WxM1KxQT03R|%OmThec3L6n*SGwTI*XNc>Q^!}IwFtdrk zC16g5xGTUsN&l7sQCbGf>_uQGQdFm;Zz65$nneMa*#uxJ&<=QsQ2Br4d2z+Xm8H$k z$qB&Ai=V?^`uSH$cd{Ja17K#WffXr{(*WNh&0N04ZhxlW4omv1QbaX?hXB7ZpKYev zh**b!E=hmZ1@I5eY!a|1sU}~KaNG=&&w+K4Zl{CQJOgItpKVQU)a^BH)n*8{OeP0qlhom2h_!Wvn(xq~Y|Dpgsw0$)qz{z0qRD|uIq})T`q5$6eK2}GR zPaU>YWXZ=YJCnP^rxvx=u%vkrp#L+;4Pa(oPF$}M$V=WqU}Jh39j4XqhRoH9J0njS z;eQ&60K6PJwlu@pq{n?jQr*kV%sP_3`eR^Gm6zZhmsh>fs|Y|p@K!|xZ}Gh8_$YSz z9H!Sjp;_`4c4U2!w2W^@t1p-VpCWtCk delta 683 zcmV;c0#yCx2f_uABYy&kNklSXCYRVu%3$?RIAqv4@nH0gw zpn`%}rL<5|_<>3aJ4I8Zuu$+DRM1id74?6*p2N(8=XrN^GjAtv0(;;GVdvg^&cbZo zynRDMty;CpCNnzV76R`8@4If` z1Fvaau|n9>UEw>-XQJ11xrtbb(>dpU!%PFa{uk1;T;Icf=wi{LhR2%dsZ;D_~w$PGQ|%?uALWLng` zJwnkqc^cz=5>X_5er9Q9Wp3xff3F5Pg&UaSHMqa;AX*3bY@6<9w;;~*x;Ul z10KNynhcoaZH5IzPK$y6OZ;WmV^Am4#>E zqZ1?*9@^4BZ8s{IO?NV3l1$W~t&Ro}; zMg@aW@EyDY$8|kboCRLT*`vDNm@FLN_{&S}?IcoHoEc{y*0olxTD2-ye*kaR#?6Px(Pf0{URA@u(m|JKZWfaH%|JiH=E0tzv zHff}y(t`HEKD1i0lf_ig7cZ5XKwkehbmZ945rD>Y`tIwbD3jib{o>o?#?%}voQ<#US?s=cYn_RH|Lu@XAaTgi!H7n zO920O2Ai4zv3u8hfHa0qHw(160FL>d51?BQv>bq(%Nl5NfAxh=X;*V)&Ta-o(=s5A z`4j{%`l5-asar3#41h>q8=T3X0IVvD9)X^`jvSnd8=@&0kV2*(U!{L1BO>)4t5E>4KpkC52CZv(QUx=0?RG4#-) z1&}{`IxwM)0Jyw{$bZo8uHu!$=i`EiH3MRsy8*l!AZ`y0Yu};+5E)3o8T}E!wE^OO zhTgq~JUkr-L~I!l+q?(BQAJUkX;>dC+SWBw0uX_Qv43m|?QR+_4Tz+nm9Ib=gaN_L za|&0Gwh<5~A@JIZ0>}bfvHh#Y0w!RiD_11p205AsAhx+3;BA0h6qW{{14slpi}}8H z#2gTX5-1CRd_lu{XKtMN0L6{VG2M0q#O*N)YRsMB7!p(cOr7|vE`WDaWPK9F%ieizKOrD;s^jPy95CP$s&(2iT=c-oKn6w4Bk(uYY7rOO43Ges375Ea1 z)4L5K-nnaE7|pX$CO~edKJ_7tcZ?Df(&PT!ot7$9pCXA~di_#xO z0`MWmdos{8D;5CPHQ70wkK!vjfNk!X>HA-a612*mCumqfZFtpCjR1TEU~^0WM`>91 zMt|`Y37}l13*{y+O5Dml4s2)8mrAXzlEzk%FbNf;wIx+6Po)5fOYd8f-C*(%zIt0@(P~;+uRRe*PIC6C*EG@ z$pfm>=koM=XZd4k`5a%b(Xbv@Rv)Do65Bipz TZ3zd900000NkvXXu0mjfB8eOU delta 739 zcmV<90v!F73Hk+)BYy(HNkl5Lp6dk`>P^eP1%Oau+b?2fBQ7DRwE~Yr0 z_*xvQqEK9Q=|U;^g_bVdDcVIBE)@KRQE-+js968g_1wHDos$<$GkKj?$brM8dH0=j zlD;H&GPPQT3KhITqEM58Zg722K*-(T*L3i|#8_*H=LG|-^OhqtbC%}?0o*3HBHVjNVCFlm<@tRF&i*M! z*essp`CcJX+kYbQ`aX96z0GmGr{nJkoWu5YT%3#8Zaaczv2Ew*T-AuRPFrpDXbq_+ z=g0+!PC@J*_!!&I@!0`?I70ZQdUk9E^GM=M(G=%RLFDot6hCzc_L=61X5+k0V8VcH zg;}IuG|Y8*>ib~u%wbvv6jt!k;X`RUSq_LWnMd~>HjUZ$jrFI95gQ_M+d1jNv%U; zW}NFw2h8Wm_zNCH7iAsanC#Lrm+aiGlQ7SQ&R?&Xpfs%f>SkMLN93Kc4Zi{D!5 V0?=TvSAzfm002ovPDHLkV1m!oaTovq diff --git a/5calls/app/src/main/res/drawable-xxhdpi/ic_star_outline_white_24dp.png b/5calls/app/src/main/res/drawable-xxhdpi/ic_star_outline_white_24dp.png index 1961c40fb8e61bae78593d4caddd6de28b2b7d30..7c837c224957104e97f15f13aabbd1a9366569bf 100644 GIT binary patch delta 2375 zcmV-N3Apx&4AByhBYyw^b5ch_0Itp)=>Px;3rR#lRCr$Pn+fo}V-?50r(Lv>r6Mg; zqLL^iOd_fYNr@)eTFit}!qBELBumjuk`|g!sVvzlnxvG9kqBdHBSK|wJw2cQoVR)A zao@YV?{k0m*UUXLcYgPG@B6;@Ip6m@XZfD_uZi?*2$gUkTOTYG(her)KvnEhd20k#t6=vbCB0qPtr4 z&Ri4#x%q!B%)X@ zM6nIc>}PdU?RJ%!0_5)e{wb2)+_L=BB<)~k-c7y!XU!U*7fJe#q^Gs0@<+CwnO)gm z)oxdq89))*_mT9m%sH1@;H*C^>65bx`LhIQc}ZWB^nZ#G_x1;pwllLoce8VlBr5hMF+_`-ByAq*Tp;P0g%z!DW|#L_AVLc~E+B-fwTGBfT zEBcb8w|_6Rvz`S&FOWo*yh;Yp-z4p7X5Zv9cYlMVFGzYqcFgZ1>=y z5I=KhvAupJX=5|{YXI~_Nk5eI!eW~pAnB-uOdJ;)peIM>yjgKi_cpU*^3UA;y~%>u zYPo!0()MO{M|Yc;?98bG${tmnUM-iMLGi%%ERNV6ffSRO#a!EVk=RIJ|ci&`{Z(Pa=afJq+N38AD8sO z;ybn>K>bS+1ufwGMbe*IUT{jcbp^2%Aa`Fw65;r%h0+Zm%ce2`s-lmO9pig`(*n@* z!haW$b@ve{le<~~yj9W_W_I5GzHHiZS=E9u>mPHu}z5%qSI^qEw!E;EHS{6x|& zlCEzf=0^G;cgM+|ED2il(L)y5_yqhy{(qkTdHr3|?f8Q*^&2FeRyybM`tH75@I}wc zeB27L7JOU&!p}AT^S(`33v}*|W`?tGm5~5(rn}>B4rDu|ZTHv#S9>rm{`gdNvyVyo znh3-D=Kp(Y(WgPvvi*pR+`#5<^B({CE=i9Wu-5xy+a6+O_@$vT7C-?KCQkZ)gnuO3 zG`X;se;lR2wWEG?n%}$oYLX~rHW=VLX(N3g5p*Y*8C!g$j15q8C3oLG5;($nc|H!0 zJ9p(mX1j3%S<9MX$pn^MU<%mUB&4T~L?t_*3qb5`IuJxS?p7(+q}+s(;A}I)7foH< zoi)8KN|@CL{2*4nFE!w#Ynm9KxPM!0F~EUv=dP8)-NI*mdC~<}C~4Ekl=H>0$Jy^EnHi3;y0|+5<89#=%QOJ%rFPrR%pm_e zNiTrHnjp3)2jF+g%$hRbI2155N`Y$P?qu}bfIS9~{say9BgzUFael7~KmiiK02023BDItY6Ro|=K9qE z3XtG@D00hI%{pfG%bozOou)p@=`&hLyEK$-pX-?yvNMo zqgy3ce3&w;`>vEWxwwJ(v-b3 z$C&d|)hsk$V|9SS3LwVdkQ$*_#77W{A0qBf8|dKR!1?|P@+mW;R2XzTDFi+)FP7nU zRv2Y{lbY8w0Ak+x=YPdQ7|`6=%t+*xNB{{-$c#|gW?pg#yiJ7k8*|0ookWyUVyohJ zUQ&C$dKv&xA3=ru4~tL|i&!!}@9uC(6q(d-M7p-_2sITEij)EFddXODOy!d?18%MZ zRt&mE7FEcwatOjnIO#AsGIPP3YeAureQ-3}mYjSrILmYKZ0iTs-N4kYWiX*`?>i3odGJu{2;k5IdrmTh_W0Y zfMG(P!G|hR8-F02?WfXn7E5KT!;j#5+FC|LEG9lKYlw7rhx{UxGigS5caX5{Xz}F! z>w(mUCf~xjSCMJ}h2uOd8>1VxKq3@F3pigMS{c}32%vb#h2|bD@Nw1)sQcG?oNAmO z9P3U*?~DfHC@0DA0o#Mt%%!99mT>H_16U_Bjpgt|xqm)_1P#HFJ+E;Ts|gU3sU&u} zgD%%V!blo$(YSr7<^o|&Ovd7%2X#|&N4=?;H50Sr;Lv(ZO@Qb{UDDE2q>?`=ZIOe_ zjM0_O;_l2AeI)WID*7^qA{z3H2gP!4sR>Y-AhI~ZGIbfz>5^J4plJ2HJoz!A9SlL) zVy>1j)_(-(Tn4_gTSj7sgT1&0c|OP#Vz6Q(9DO97&0*)I2ZQruwX-Ev0m$76;cO$q zGxLKyJ;-)ikS7MCbYa`QF}0Z(-6JY4UxS;j1rWnl-;D?3nDV%AM!k7D9T56krY-%d zwxOs=%&8VY7z3+jj8+y{-o@4rb+y=N&IxC#IO002ovPDHLkV1gBsl|ldj delta 1528 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 delta 1164 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 Date: Sat, 29 Mar 2025 04:59:35 -0500 Subject: [PATCH 6/6] Implement starred issues filter --- .../android/a5calls/adapter/IssuesAdapter.java | 15 ++++++++++++++- .../android/a5calls/controller/MainActivity.java | 4 ++-- 5calls/app/src/main/res/values/strings.xml | 4 ++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java index 47251378..fd181af8 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/adapter/IssuesAdapter.java @@ -130,7 +130,10 @@ public void setFilterAndSearch(String filterText, String searchText) { } else if (TextUtils.equals(filterText, mActivity.getResources().getString(R.string.top_issues_filter))) { mIssues = filterActiveIssues(); - } else { + } else if (TextUtils.equals(filterText, mActivity.getResources().getString(R.string.starred_issues_filter))) { + mIssues = filterStarredIssues(); + } + else { // Filter by the category string. mIssues = filterIssuesByCategory(filterText); } @@ -183,6 +186,16 @@ private ArrayList filterActiveIssues() { return tempIssues; } + private ArrayList filterStarredIssues() { + ArrayList tempIssues = new ArrayList<>(); + for (Issue issue : mAllIssues) { + if (starredIssueIds.contains(issue.id)) { + tempIssues.add(issue); + } + } + return tempIssues; + } + private ArrayList filterIssuesByCategory(String activeCategory) { ArrayList tempIssues = new ArrayList<>(); for (Issue issue : mAllIssues) { diff --git a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java index dd85eda5..071071f6 100644 --- a/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java +++ b/5calls/app/src/main/java/org/a5calls/android/a5calls/controller/MainActivity.java @@ -209,7 +209,7 @@ public void onError() { binding.searchText.setText(mSearchText); } } else { - // Safe to use index as the top two filters are hard-coded strings. + // Safe to use index as the top three filters are hard-coded strings. mFilterText = mFilterAdapter.getItem(0); } binding.searchText.setOnClickListener(new View.OnClickListener() { @@ -565,7 +565,7 @@ private void updateOnBackPressedCallbackEnabled() { } private void populateFilterAdapterIfNeeded(List issues) { - if (mFilterAdapter.getCount() > 2) { + if (mFilterAdapter.getCount() > 3) { // Already populated. Don't try again. // This assumes that the categories won't change much during the course of a session. return; diff --git a/5calls/app/src/main/res/values/strings.xml b/5calls/app/src/main/res/values/strings.xml index 9b7bc129..71677caf 100644 --- a/5calls/app/src/main/res/values/strings.xml +++ b/5calls/app/src/main/res/values/strings.xml @@ -477,9 +477,13 @@ All issues + + Starred issues + @string/top_issues_filter @string/all_issues_filter + @string/starred_issues_filter