diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml
index 636616b..43cb3ee 100644
--- a/res/layout/conversation_list_item_view.xml
+++ b/res/layout/conversation_list_item_view.xml
@@ -37,7 +37,6 @@
android:layout_height="wrap_content"
android:gravity="center_vertical|left"
android:visibility="gone"
- android:src="@drawable/ic_archive_small_dark"
android:importantForAccessibility="no"
android:contentDescription="@null"/>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
new file mode 100644
index 0000000..1e1ee52
--- /dev/null
+++ b/res/values/cm_strings.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ Swipe to delete
+ Swipe to the right to delete a conversation
+
diff --git a/res/values/lineage_constants.xml b/res/values/lineage_constants.xml
new file mode 100644
index 0000000..1975b6a
--- /dev/null
+++ b/res/values/lineage_constants.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+ swipe_right_deletes_conversation
+
+
+ false
+
diff --git a/res/xml-v21/preferences_application.xml b/res/xml-v21/preferences_application.xml
index 5d8ee4c..ab9206a 100644
--- a/res/xml-v21/preferences_application.xml
+++ b/res/xml-v21/preferences_application.xml
@@ -66,6 +66,13 @@
android:persistent="true"
android:dependency="@string/notifications_enabled_pref_key" />
+
+
diff --git a/res/xml-v23/preferences_application.xml b/res/xml-v23/preferences_application.xml
index 8fbadc4..0f106c7 100644
--- a/res/xml-v23/preferences_application.xml
+++ b/res/xml-v23/preferences_application.xml
@@ -67,6 +67,13 @@
android:persistent="true"
android:dependency="@string/notifications_enabled_pref_key" />
+
+
diff --git a/res/xml/preferences_application.xml b/res/xml/preferences_application.xml
index 7a18d09..4c67407 100644
--- a/res/xml/preferences_application.xml
+++ b/res/xml/preferences_application.xml
@@ -66,6 +66,13 @@
android:persistent="true"
android:dependency="@string/notifications_enabled_pref_key" />
+
+
diff --git a/src/com/android/messaging/datamodel/action/BugleActionToasts.java b/src/com/android/messaging/datamodel/action/BugleActionToasts.java
index f60facd..17d15f2 100644
--- a/src/com/android/messaging/datamodel/action/BugleActionToasts.java
+++ b/src/com/android/messaging/datamodel/action/BugleActionToasts.java
@@ -114,7 +114,6 @@ public class BugleActionToasts {
}
public static void onConversationDeleted() {
- showToast(R.string.conversation_deleted);
}
private static void showToast(final int messageResId) {
diff --git a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
index d7abe85..1d67308 100644
--- a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
+++ b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
@@ -28,6 +28,7 @@ import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;
+import android.preference.SwitchPreference;
import android.preference.TwoStatePreference;
import android.provider.Settings;
import androidx.core.app.NavUtils;
@@ -97,6 +98,8 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity {
private String mSmsEnabledPrefKey;
private Preference mSmsEnabledPreference;
private boolean mIsSmsPreferenceClicked;
+ private String mSwipeRightToDeleteConversationkey;
+ private SwitchPreference mSwipeRightToDeleteConversationPreference;
public ApplicationSettingsFragment() {
// Required empty constructor
@@ -121,6 +124,10 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity {
mSmsDisabledPreference = findPreference(mSmsDisabledPrefKey);
mSmsEnabledPrefKey = getString(R.string.sms_enabled_pref_key);
mSmsEnabledPreference = findPreference(mSmsEnabledPrefKey);
+ mSwipeRightToDeleteConversationkey = getString(
+ R.string.swipe_right_deletes_conversation_key);
+ mSwipeRightToDeleteConversationPreference =
+ (SwitchPreference) findPreference(mSwipeRightToDeleteConversationkey);
mIsSmsPreferenceClicked = false;
final SharedPreferences prefs = getPreferenceScreen().getSharedPreferences();
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java b/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java
index b22ccfc..de036fc 100644
--- a/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java
+++ b/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java
@@ -58,6 +58,7 @@ import com.android.messaging.util.PhoneUtils;
import com.android.messaging.util.Typefaces;
import com.android.messaging.util.UiUtils;
import com.android.messaging.util.UriUtil;
+import org.lineageos.messaging.util.PrefsUtils;
import java.util.List;
@@ -75,6 +76,8 @@ public class ConversationListItemView extends FrameLayout implements OnClickList
private static String sPlusOneString;
private static String sPlusNString;
+ private static final int SWIPE_DIRECTION_RIGHT = 2;
+
public interface HostInterface {
boolean isConversationSelected(final String conversationId);
void onConversationClicked(final ConversationListItemData conversationListItemData,
@@ -502,6 +505,18 @@ public class ConversationListItemView extends FrameLayout implements OnClickList
final int notificationBellVisiblity = mData.getNotificationEnabled() ? GONE : VISIBLE;
mNotificationBellView.setVisibility(notificationBellVisiblity);
+
+ if (PrefsUtils.isSwipeRightToDeleteEnabled()) {
+ mCrossSwipeArchiveLeftImageView.setImageDrawable(getResources()
+ .getDrawable(R.drawable.ic_delete_small_dark));
+ mCrossSwipeArchiveRightImageView.setImageDrawable(getResources()
+ .getDrawable(R.drawable.ic_archive_small_dark));
+ } else {
+ mCrossSwipeArchiveLeftImageView.setImageDrawable(getResources()
+ .getDrawable(R.drawable.ic_archive_small_dark));
+ mCrossSwipeArchiveRightImageView.setImageDrawable(getResources()
+ .getDrawable(R.drawable.ic_archive_small_dark));
+ }
}
public boolean isSwipeAnimatable() {
@@ -535,10 +550,16 @@ public class ConversationListItemView extends FrameLayout implements OnClickList
}
}
- public void onSwipeComplete() {
+ public void onSwipeComplete(int swipeDirection) {
final String conversationId = mData.getConversationId();
+ if (PrefsUtils.isSwipeRightToDeleteEnabled()
+ && swipeDirection == ConversationListSwipeHelper.SWIPE_DIRECTION_RIGHT) {
+ mData.deleteConversation();
+ UiUtils.showSnackBar(getContext(), getRootView(),
+ getResources().getString(R.string.conversation_deleted));
+ return;
+ }
UpdateConversationArchiveStatusAction.archiveConversation(conversationId);
-
final Runnable undoRunnable = new Runnable() {
@Override
public void run() {
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java b/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java
index e5859a6..8b8ed0c 100644
--- a/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java
+++ b/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java
@@ -44,9 +44,9 @@ public class ConversationListSwipeHelper implements OnItemTouchListener {
private static final float PERCENTAGE_OF_WIDTH_TO_DISMISS = 0.4f;
private static final float FLING_PERCENTAGE_OF_WIDTH_TO_DISMISS = 0.05f;
- private static final int SWIPE_DIRECTION_NONE = 0;
- private static final int SWIPE_DIRECTION_LEFT = 1;
- private static final int SWIPE_DIRECTION_RIGHT = 2;
+ public static final int SWIPE_DIRECTION_NONE = 0;
+ public static final int SWIPE_DIRECTION_LEFT = 1;
+ public static final int SWIPE_DIRECTION_RIGHT = 2;
private final RecyclerView mRecyclerView;
private final long mDefaultRestoreAnimationDuration;
@@ -269,7 +269,7 @@ public class ConversationListSwipeHelper implements OnItemTouchListener {
private void onSwipeGestureEnd(final ConversationListItemView itemView,
final int swipeDirection) {
if (swipeDirection == SWIPE_DIRECTION_RIGHT || swipeDirection == SWIPE_DIRECTION_LEFT) {
- itemView.onSwipeComplete();
+ itemView.onSwipeComplete(swipeDirection);
}
// Balances out onSwipeGestureStart.
diff --git a/src/com/android/messaging/util/UiUtils.java b/src/com/android/messaging/util/UiUtils.java
index 6e0c16e..17c877f 100644
--- a/src/com/android/messaging/util/UiUtils.java
+++ b/src/com/android/messaging/util/UiUtils.java
@@ -132,6 +132,16 @@ public class UiUtils {
null /* placement */);
}
+ public static void showSnackBar(final Context context, @NonNull final View parentView,
+ final String message) {
+ Assert.notNull(context);
+ Assert.isTrue(!TextUtils.isEmpty(message));
+ SnackBarManager.get()
+ .newBuilder(parentView)
+ .setText(message)
+ .show();
+ }
+
public static void showSnackBarWithCustomAction(final Context context,
@NonNull final View parentView,
@NonNull final String message,
diff --git a/src/org/lineageos/messaging/util/PrefsUtils.java b/src/org/lineageos/messaging/util/PrefsUtils.java
new file mode 100644
index 0000000..fa08af4
--- /dev/null
+++ b/src/org/lineageos/messaging/util/PrefsUtils.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.lineageos.messaging.util;
+
+import android.content.Context;
+import com.android.messaging.Factory;
+import com.android.messaging.R;
+import com.android.messaging.util.BuglePrefs;
+
+public class PrefsUtils {
+ private PrefsUtils() {
+ //Don't instantiate
+ }
+
+ /**
+ * Returns whether or not swipe to dismiss in the ConversationListFragment deletes
+ * the conversation rather than archiving it.
+ * @return hopefully true
+ */
+ public static boolean isSwipeRightToDeleteEnabled() {
+ final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
+ final Context context = Factory.get().getApplicationContext();
+ final String prefKey = context.getString(R.string.swipe_right_deletes_conversation_key);
+ final boolean defaultValue = context.getResources().getBoolean(
+ R.bool.swipe_right_deletes_conversation_default);
+ return prefs.getBoolean(prefKey, defaultValue);
+ }
+}