Messaging: Implement option for swipe right to delete.
Squashed commit of the following: Author: Adnan Begovic <adnan@cyngn.com> Date: Thu Jan 14 17:20:43 2016 -0800 Messaging: Implement option for swipe to delete. No one wants to swipe to archive, that's stupid. Change-Id: Ia8f0fc675582ef343311e60b755e284322f25102 Author: chengzhi.hou <chengzhi.hou@ck-telecom.com> Date: Wed Feb 24 20:01:17 2016 +0800 Messaging: Swipe right to delete conversation Change "swipe delete" to "swipe right delete", so SwipeArchive and SwipeDelete can exist at the same time. Change-Id: Id66167c2e749f8ab0ee917e0138027c7404b8c90 Author: Michael Bestas <mikeioannina@cyanogenmod.org> Date: Tue Mar 1 02:27:16 2016 +0200 Improve swipe to delete strings Change-Id: I180d09a6680084d9fd87c6dafd56db18ca5a580a Author: Joey Rizzoli <joey@cyanogenmoditalia.it> Date: Mon Oct 17 16:32:25 2016 +0200 Messaging: show snackbar instead of toast when deleting conversation more consistency with archive action Change-Id: I06129850860a2a51c10ade65fb87c9f37a0c2bfa Signed-off-by: Joey Rizzoli <joey@cyanogenmoditalia.it> Change-Id: Ia8f0fc675582ef343311e60b755e284322f25102
This commit is contained in:
committed by
Michael Bestas
parent
950286f001
commit
086bb5c3f5
@@ -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"/>
|
||||
<FrameLayout
|
||||
@@ -50,7 +49,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|right"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/ic_archive_small_dark"
|
||||
android:importantForAccessibility="no"
|
||||
android:contentDescription="@null"/>
|
||||
</LinearLayout>
|
||||
|
||||
21
res/values/cm_strings.xml
Normal file
21
res/values/cm_strings.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 The Android Open Source 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.
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<!-- Swipe to delete conversation -->
|
||||
<string name="swipe_to_delete_conversation_pref_title">Swipe to delete</string>
|
||||
<string name="swipe_to_delete_conversation_pref_summary">Swipe to the right to delete a conversation</string>
|
||||
</resources>
|
||||
24
res/values/lineage_constants.xml
Normal file
24
res/values/lineage_constants.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<resources>
|
||||
<!-- Preference keys for user-visible settings -->
|
||||
<!-- Application-wide settings -->
|
||||
<string name="swipe_right_deletes_conversation_key" translatable="false">swipe_right_deletes_conversation</string>
|
||||
|
||||
<!-- This should really go into a config xml, but whoever wrote this app is an idiot, so follow their pattern -->
|
||||
<bool name="swipe_right_deletes_conversation_default" translatable="false">false</bool>
|
||||
</resources>
|
||||
@@ -66,6 +66,13 @@
|
||||
android:persistent="true"
|
||||
android:dependency="@string/notifications_enabled_pref_key" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="@string/swipe_right_deletes_conversation_key"
|
||||
android:title="@string/swipe_to_delete_conversation_pref_title"
|
||||
android:summary="@string/swipe_to_delete_conversation_pref_summary"
|
||||
android:defaultValue="false"
|
||||
android:persistent="true" />
|
||||
|
||||
<PreferenceScreen
|
||||
android:key="@string/advanced_pref_key"
|
||||
android:title="@string/advanced_settings" />
|
||||
|
||||
@@ -67,6 +67,13 @@
|
||||
android:persistent="true"
|
||||
android:dependency="@string/notifications_enabled_pref_key" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="@string/swipe_right_deletes_conversation_key"
|
||||
android:title="@string/swipe_to_delete_conversation_pref_title"
|
||||
android:summary="@string/swipe_to_delete_conversation_pref_summary"
|
||||
android:defaultValue="false"
|
||||
android:persistent="true" />
|
||||
|
||||
<PreferenceScreen
|
||||
android:key="@string/advanced_pref_key"
|
||||
android:title="@string/advanced_settings" />
|
||||
|
||||
@@ -66,6 +66,13 @@
|
||||
android:persistent="true"
|
||||
android:dependency="@string/notifications_enabled_pref_key" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="@string/swipe_right_deletes_conversation_key"
|
||||
android:title="@string/swipe_to_delete_conversation_pref_title"
|
||||
android:summary="@string/swipe_to_delete_conversation_pref_summary"
|
||||
android:defaultValue="false"
|
||||
android:persistent="true" />
|
||||
|
||||
<PreferenceScreen
|
||||
android:key="@string/advanced_pref_key"
|
||||
android:title="@string/advanced_settings" />
|
||||
|
||||
@@ -114,7 +114,6 @@ public class BugleActionToasts {
|
||||
}
|
||||
|
||||
public static void onConversationDeleted() {
|
||||
showToast(R.string.conversation_deleted);
|
||||
}
|
||||
|
||||
private static void showToast(final int messageResId) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
42
src/org/lineageos/messaging/util/PrefsUtils.java
Normal file
42
src/org/lineageos/messaging/util/PrefsUtils.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user