From 55373e82a5a4e1b67fc34db1ea3e165c62e514a9 Mon Sep 17 00:00:00 2001 From: Arshbeer Singh Date: Wed, 4 Nov 2020 01:25:13 -0800 Subject: [PATCH] Fix Issue #65 --- .../protect/card_locker/MainActivity.java | 164 +++++++++++------- app/src/main/res/drawable/ic_close.xml | 10 ++ app/src/main/res/drawable/ic_copy.xml | 9 + app/src/main/res/drawable/ic_edit.xml | 10 ++ app/src/main/res/drawable/ic_share.xml | 10 ++ app/src/main/res/menu/card_longclick_menu.xml | 15 +- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 3 + 8 files changed, 163 insertions(+), 59 deletions(-) create mode 100644 app/src/main/res/drawable/ic_close.xml create mode 100644 app/src/main/res/drawable/ic_copy.xml create mode 100644 app/src/main/res/drawable/ic_edit.xml create mode 100644 app/src/main/res/drawable/ic_share.xml diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 433cd9a60..69d86ef42 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -1,11 +1,9 @@ package protect.card_locker; -import android.app.AlertDialog; import android.app.SearchManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -16,10 +14,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; import android.util.Log; -import android.view.ContextMenu; import android.view.GestureDetector; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; @@ -27,6 +23,7 @@ import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.view.ActionMode; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; import java.util.List; @@ -37,11 +34,71 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O { private static final String TAG = "Catima"; + LoyaltyCard card; + private ActionMode currentActionMode; private Menu menu; private GestureDetector gestureDetector; protected String filter = ""; protected int selectedTab = 0; + private ActionMode.Callback currentActionModeCallback = new ActionMode.Callback() + { + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) + { + mode.getMenuInflater().inflate(R.menu.card_longclick_menu, menu); + mode.setTitle(getString(R.string.card_selected) + card.store); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) + { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) + { + if (item.getItemId() == R.id.action_copy_to_clipboard) + { + mode.finish(); + ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText(card.store, card.cardId); + clipboard.setPrimaryClip(clip); + Toast.makeText(MainActivity.this, R.string.copy_to_clipboard_toast, Toast.LENGTH_LONG).show(); + return true; + } + else if (item.getItemId() == R.id.action_share) + { + mode.finish(); + final ImportURIHelper importURIHelper = new ImportURIHelper(MainActivity.this); + importURIHelper.startShareIntent(card); + return true; + } + else if(item.getItemId() == R.id.action_edit) + { + mode.finish(); + Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class); + Bundle bundle = new Bundle(); + bundle.putInt("id", card.id); + bundle.putBoolean("update", true); + intent.putExtras(bundle); + startActivity(intent); + return true; + } + + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) + { + currentActionMode= null; + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -126,17 +183,39 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O .show(); } */ + + ListView listView = findViewById(R.id.list); + listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() + { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) + { + if (currentActionMode != null) + { + return false; + } + + ListView listView = findViewById(R.id.list); + Cursor cardCursor = (Cursor) listView.getItemAtPosition(position); + card = LoyaltyCard.toLoyaltyCard(cardCursor); + + currentActionMode = startSupportActionMode(currentActionModeCallback); + return true; + } + }); } @Override - protected void onResume() { + protected void onResume() + { super.onResume(); if (menu != null) { SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); - if (!searchView.isIconified()) { + if (!searchView.isIconified()) + { filter = searchView.getQuery().toString(); } } @@ -167,7 +246,8 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O // End of active tab logic FloatingActionButton addButton = findViewById(R.id.fabAdd); - addButton.setOnClickListener(new View.OnClickListener() { + addButton.setOnClickListener(new View.OnClickListener() + { @Override public void onClick(View v) { Intent i = new Intent(getApplicationContext(), ScanActivity.class); @@ -209,7 +289,8 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O } @Override - public void onBackPressed() { + public void onBackPressed() + { if (menu == null) { super.onBackPressed(); @@ -218,7 +299,8 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); - if (!searchView.isIconified()) { + if (!searchView.isIconified()) + { searchView.setIconified(true); } else { TabLayout groupsTabLayout = findViewById(R.id.groups); @@ -332,45 +414,6 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O startActivity(browserIntent); } - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) - { - super.onCreateContextMenu(menu, v, menuInfo); - if (v.getId()==R.id.list) - { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.card_longclick_menu, menu); - } - } - - @Override - public boolean onContextItemSelected(MenuItem item) - { - AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); - ListView listView = findViewById(R.id.list); - - Cursor cardCursor = (Cursor)listView.getItemAtPosition(info.position); - LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor); - - if(item.getItemId() == R.id.action_clipboard) - { - ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText(card.store, card.cardId); - clipboard.setPrimaryClip(clip); - - Toast.makeText(this, R.string.copy_to_clipboard_toast, Toast.LENGTH_LONG).show(); - return true; - } - else if(item.getItemId() == R.id.action_share) - { - final ImportURIHelper importURIHelper = new ImportURIHelper(this); - importURIHelper.startShareIntent(card); - return true; - } - - return super.onContextItemSelected(item); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -379,27 +422,33 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O getMenuInflater().inflate(R.menu.main_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - if (searchManager != null) { + if (searchManager != null) + { SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setSubmitButtonEnabled(false); - searchView.setOnCloseListener(new SearchView.OnCloseListener() { + searchView.setOnCloseListener(new SearchView.OnCloseListener() + { @Override - public boolean onClose() { + public boolean onClose() + { invalidateOptionsMenu(); return false; } }); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() + { @Override - public boolean onQueryTextSubmit(String query) { + public boolean onQueryTextSubmit(String query) + { return false; } @Override - public boolean onQueryTextChange(String newText) { + public boolean onQueryTextChange(String newText) + { filter = newText; TabLayout groupsTabLayout = findViewById(R.id.groups); @@ -414,7 +463,6 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O } }); } - return super.onCreateOptionsMenu(menu); } @@ -430,14 +478,14 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O return true; } - if(id == R.id.action_import_export) + if (id == R.id.action_import_export) { Intent i = new Intent(getApplicationContext(), ImportExportActivity.class); startActivityForResult(i, Utils.MAIN_REQUEST); return true; } - if(id == R.id.action_settings) + if (id == R.id.action_settings) { Intent i = new Intent(getApplicationContext(), SettingsActivity.class); startActivityForResult(i, Utils.MAIN_REQUEST); @@ -450,7 +498,7 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O return true; } - if(id == R.id.action_about) + if (id == R.id.action_about) { Intent i = new Intent(getApplicationContext(), AboutActivity.class); startActivityForResult(i, Utils.MAIN_REQUEST); diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 000000000..874303af5 --- /dev/null +++ b/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_copy.xml b/app/src/main/res/drawable/ic_copy.xml new file mode 100644 index 000000000..00d235484 --- /dev/null +++ b/app/src/main/res/drawable/ic_copy.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 000000000..9d692c216 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_share.xml b/app/src/main/res/drawable/ic_share.xml new file mode 100644 index 000000000..2b7b5f35f --- /dev/null +++ b/app/src/main/res/drawable/ic_share.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/menu/card_longclick_menu.xml b/app/src/main/res/menu/card_longclick_menu.xml index 5ff953855..2e23a87de 100644 --- a/app/src/main/res/menu/card_longclick_menu.xml +++ b/app/src/main/res/menu/card_longclick_menu.xml @@ -3,11 +3,24 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 57f10246e..f1cdcc58c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,6 +4,7 @@ Search Add + Selected:\u0020 Click the + plus button to add a card, or import some from the ⋮ menu first. Didn\'t find anything. Try changing your search. diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fba2c047c..5ad402cd7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,6 +7,9 @@ @color/colorPrimaryDark @color/colorSecondary @color/colorSecondary + @color/colorPrimary + true + @drawable/ic_close