From 388a0723dc4202c21fcb935250d5c0fcb18b4cfe Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Wed, 29 Nov 2017 19:03:34 -0500 Subject: [PATCH] Remove support for adding shortcuts from within the app The preferred way to create a shortcut is through the launcher. Although it is possible for an app to create shortcuts, there is concern that allowing the app to do so may not be desirable due to potentials for abuse. As there is support now for adding shortcuts through the launcher, this app do not need to also support creating them itself. --- app/src/main/AndroidManifest.xml | 2 - .../card_locker/LoyaltyCardViewActivity.java | 40 ------------- .../res/layout/loyalty_card_view_activity.xml | 49 ---------------- app/src/main/res/values/strings.xml | 1 - .../LoyaltyCardViewActivityTest.java | 57 +------------------ .../card_locker/ShortcutAddedReceiver.java | 39 ------------- 6 files changed, 1 insertion(+), 187 deletions(-) delete mode 100644 app/src/test/java/protect/card_locker/ShortcutAddedReceiver.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e80d163c3..7306a766f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,8 +8,6 @@ android:name="android.permission.READ_EXTERNAL_STORAGE"/> - 0 && barcodeTypeField.getText().length() > 0) { String formatString = barcodeTypeField.getText().toString(); @@ -302,7 +293,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity { String store = storeFieldEdit.getText().toString(); String note = noteFieldEdit.getText().toString(); - boolean shouldAddShortcut = shortcutCheckbox.isChecked(); String cardId = cardIdFieldView.getText().toString(); String barcodeType = barcodeTypeField.getText().toString(); @@ -328,39 +318,9 @@ public class LoyaltyCardViewActivity extends AppCompatActivity loyaltyCardId = (int)db.insertLoyaltyCard(store, note, cardId, barcodeType); } - if(shouldAddShortcut) - { - addShortcut(loyaltyCardId, store); - } - finish(); } - private void addShortcut(int id, String name) - { - Intent shortcutIntent = new Intent(this, LoyaltyCardViewActivity.class); - shortcutIntent.setAction(Intent.ACTION_MAIN); - // Prevent instances of the view activity from piling up; if one exists let this - // one replace it. - shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - Bundle bundle = new Bundle(); - bundle.putInt("id", id); - bundle.putBoolean("view", true); - shortcutIntent.putExtras(bundle); - - Intent intent = new Intent(); - intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); - intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); - intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource - .fromContext(this, R.mipmap.ic_launcher)); - intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); - // Do not duplicate the shortcut if it is already there - intent.putExtra("duplicate", false); - getApplicationContext().sendBroadcast(intent); - - Toast.makeText(this, R.string.addedShortcut, Toast.LENGTH_LONG).show(); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { diff --git a/app/src/main/res/layout/loyalty_card_view_activity.xml b/app/src/main/res/layout/loyalty_card_view_activity.xml index 940a869d7..8e2a6da93 100644 --- a/app/src/main/res/layout/loyalty_card_view_activity.xml +++ b/app/src/main/res/layout/loyalty_card_view_activity.xml @@ -146,55 +146,6 @@ android:background="@color/inputBorder" /> - - - - - - - - - - - - - - - Store Note - Add to Home Screen Card ID Barcode Type diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 6f7b56731..8e5b96d3b 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -89,7 +89,6 @@ public class LoyaltyCardViewActivityTest */ private void saveLoyaltyCardWithArguments(final Activity activity, final String store, final String note, - final boolean addShortcut, final String cardId, final String barcodeType, boolean creatingNewCard) @@ -106,25 +105,18 @@ public class LoyaltyCardViewActivityTest final EditText storeField = (EditText) activity.findViewById(R.id.storeNameEdit); final EditText noteField = (EditText) activity.findViewById(R.id.noteEdit); - final CheckBox shortcutCheckbox = (CheckBox) activity.findViewById(R.id.shortcutCheckbox); final TextView cardIdField = (TextView) activity.findViewById(R.id.cardIdView); final TextView barcodeTypeField = (TextView) activity.findViewById(R.id.barcodeType); storeField.setText(store); noteField.setText(note); - shortcutCheckbox.setChecked(addShortcut); cardIdField.setText(cardId); barcodeTypeField.setText(barcodeType); - ShortcutAddedReceiver shortcutAddedReceiver = new ShortcutAddedReceiver(); - shortcutAddedReceiver.registerReceiver(activity); - assertEquals(false, activity.isFinishing()); shadowOf(activity).clickMenuItem(R.id.action_save); assertEquals(true, activity.isFinishing()); - shortcutAddedReceiver.unregisterReceiver(activity); - assertEquals(1, db.getLoyaltyCardCount()); LoyaltyCard card = db.getLoyaltyCard(1); @@ -132,28 +124,6 @@ public class LoyaltyCardViewActivityTest assertEquals(note, card.note); assertEquals(cardId, card.cardId); assertEquals(barcodeType, card.barcodeType); - - Intent shortcutRequest = shortcutAddedReceiver.lastRequest(); - - if(addShortcut) - { - assertNotNull(shortcutRequest); - - String name = shortcutRequest.getStringExtra(Intent.EXTRA_SHORTCUT_NAME); - assertEquals(card.store, name); - - Intent startIntent = shortcutRequest.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT); - assertNotNull(startIntent); - Bundle startBundle = startIntent.getExtras(); - assertNotNull(startBundle); - - assertEquals(card.id, startBundle.getInt("id", -1)); - assertEquals(true, startBundle.getBoolean("view", false)); - } - else - { - assertNull(shortcutRequest); - } } /** @@ -216,8 +186,6 @@ public class LoyaltyCardViewActivityTest checkFieldProperties(activity, R.id.storeNameEdit, editVisibility, store); checkFieldProperties(activity, R.id.storeNameView, viewVisibility, store); checkFieldProperties(activity, R.id.noteEdit, editVisibility, note); - checkFieldProperties(activity, R.id.shortcutBorder, editVisibility, null); - checkFieldProperties(activity, R.id.shortcutTablerow, editVisibility, null); checkFieldProperties(activity, R.id.noteView, viewVisibility, note); checkFieldProperties(activity, R.id.cardIdView, View.VISIBLE, cardId); checkFieldProperties(activity, R.id.cardIdDivider, cardId.isEmpty() ? View.GONE : View.VISIBLE, null); @@ -308,30 +276,7 @@ public class LoyaltyCardViewActivityTest checkAllFields(activity, ViewMode.ADD_CARD, "", "", BARCODE_DATA, BARCODE_TYPE); // Save and check the gift card - saveLoyaltyCardWithArguments(activity, "store", "note", false, BARCODE_DATA, BARCODE_TYPE, true); - } - - @Test - public void startWithoutParametersCaptureBarcodeCreateLoyaltyCardSaveShortcut() throws IOException - { - registerMediaStoreIntentHandler(); - - ActivityController activityController = Robolectric.buildActivity(LoyaltyCardViewActivity.class).create(); - activityController.start(); - activityController.visible(); - activityController.resume(); - - Activity activity = (Activity)activityController.get(); - - checkAllFields(activity, ViewMode.ADD_CARD, "", "", "", ""); - - // Complete barcode capture successfully - captureBarcodeWithResult(activity, R.id.captureButton, true); - - checkAllFields(activity, ViewMode.ADD_CARD, "", "", BARCODE_DATA, BARCODE_TYPE); - - // Save and check the gift card - saveLoyaltyCardWithArguments(activity, "store", "note", true, BARCODE_DATA, BARCODE_TYPE, true); + saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, BARCODE_TYPE, true); } @Test diff --git a/app/src/test/java/protect/card_locker/ShortcutAddedReceiver.java b/app/src/test/java/protect/card_locker/ShortcutAddedReceiver.java deleted file mode 100644 index d29c17eac..000000000 --- a/app/src/test/java/protect/card_locker/ShortcutAddedReceiver.java +++ /dev/null @@ -1,39 +0,0 @@ -package protect.card_locker; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -public class ShortcutAddedReceiver extends BroadcastReceiver -{ - public static final String SHORTCUT_ADD_REQUEST = "com.android.launcher.action.INSTALL_SHORTCUT"; - - private Intent _request = null; - - @Override - public void onReceive(Context context, Intent intent) - { - _request = intent; - } - - public void registerReceiver(Context context) - { - context.registerReceiver(this, new IntentFilter(SHORTCUT_ADD_REQUEST)); - } - - public void unregisterReceiver(Context context) - { - context.unregisterReceiver(this); - } - - public Intent lastRequest() - { - return _request; - } - - public void reset() - { - _request = null; - } -}