From 1196facc4d0b44d0df34a5cdc5ac2fe29827bb25 Mon Sep 17 00:00:00 2001
From: Nick <64551534+null-nick@users.noreply.github.com>
Date: Fri, 5 Jan 2024 23:07:33 +0100
Subject: [PATCH 1/7] Init
---
.../challegram/navigation/DrawerController.java | 3 +++
.../java/org/thunderdog/challegram/telegram/Tdlib.java | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
index f65f6422ee..a5043ddac7 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
@@ -797,6 +797,9 @@ public boolean onLongClick (View v) {
}
});
}
+ } else if (itemId == R.id.btn_calls) {
+ tdlib.clearCallsHistory();
+ UI.showToast("LONG_PRESS_TO_CLEAR_CALL_HISTORY", Toast.LENGTH_LONG);
}
return false;
}
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
index f4d500d7c8..413f0b0e5a 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
@@ -10679,6 +10679,15 @@ public boolean canEditSlowMode (long chatId) {
return false;
}
+ public void clearCallsHistory () {
+ tdlib().send(new TdApi.DeleteAllCallMessages(true), (result, error) -> {
+ if (result != null) {
+ UI.showToast(String.format("%s",result), Toast.LENGTH_SHORT);
+ } else {
+ UI.showToast(String.format("%s", error), Toast.LENGTH_SHORT);
+ }});
+ }
+
public boolean isBroadcastGroup (long chatId) {
TdApi.Supergroup supergroup = chatToSupergroup(chatId);
return supergroup != null && supergroup.isBroadcastGroup;
From 62d0121b2e91cb98e7e7b37335ede9f19d876e56 Mon Sep 17 00:00:00 2001
From: Nick <64551534+null-nick@users.noreply.github.com>
Date: Mon, 8 Jan 2024 03:41:33 +0100
Subject: [PATCH 2/7] update
---
.../navigation/DrawerController.java | 19 +++++++++++++++++--
.../thunderdog/challegram/telegram/Tdlib.java | 4 ++--
app/src/main/res/values/strings.xml | 1 +
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
index a5043ddac7..8f4f6daf3c 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
@@ -785,6 +785,7 @@ public boolean onLongClick (View v) {
if (item == null) {
return false;
}
+ android.util.Log.e("ITEM_ID", String.format("%s",item.getId()));
final int itemId = item.getId();
if (itemId != R.id.account) {
if (itemId == R.id.btn_addAccount) {
@@ -798,8 +799,22 @@ public boolean onLongClick (View v) {
});
}
} else if (itemId == R.id.btn_calls) {
- tdlib.clearCallsHistory();
- UI.showToast("LONG_PRESS_TO_CLEAR_CALL_HISTORY", Toast.LENGTH_LONG);
+ showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
+ .setRawItems(
+ new ListItem[]{
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((id, result) -> {
+ if (id == R.id.btn_delete) {
+ boolean value = result.get(R.id.btn_deleteAll) != 0;
+ UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
+ // TODO: Fix crash (tdlib.clearCallsHistory(value);)
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative)
+ );
}
return false;
}
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
index 413f0b0e5a..24e426a038 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
@@ -10679,8 +10679,8 @@ public boolean canEditSlowMode (long chatId) {
return false;
}
- public void clearCallsHistory () {
- tdlib().send(new TdApi.DeleteAllCallMessages(true), (result, error) -> {
+ public void clearCallsHistory (boolean revoke) {
+ tdlib().send(new TdApi.DeleteAllCallMessages(revoke), (result, error) -> {
if (result != null) {
UI.showToast(String.format("%s",result), Toast.LENGTH_SHORT);
} else {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 41f12af399..459a2ee0cc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5003,4 +5003,5 @@
Your account %1$s (%2$s) is now deleted from Telegram servers, and can no longer be restored.\n\nUsing the same phone number will create a new account.
View once
+ Do you want to delete all recent calls?
From 89a68ebbc3ca417f4e03640eba2c7daa8ec49fc1 Mon Sep 17 00:00:00 2001
From: Nick <64551534+null-nick@users.noreply.github.com>
Date: Mon, 8 Jan 2024 17:25:00 +0100
Subject: [PATCH 3/7] update (todo: need to show the options)
---
.../navigation/DrawerController.java | 37 ++++++++++---------
.../navigation/ViewPagerTopView.java | 29 ++++++++++++++-
2 files changed, 48 insertions(+), 18 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
index 8f4f6daf3c..20e386387b 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
@@ -785,7 +785,6 @@ public boolean onLongClick (View v) {
if (item == null) {
return false;
}
- android.util.Log.e("ITEM_ID", String.format("%s",item.getId()));
final int itemId = item.getId();
if (itemId != R.id.account) {
if (itemId == R.id.btn_addAccount) {
@@ -799,22 +798,7 @@ public boolean onLongClick (View v) {
});
}
} else if (itemId == R.id.btn_calls) {
- showSettings(new SettingsWrapBuilder(R.id.btn_delete)
- .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
- .setRawItems(
- new ListItem[]{
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((id, result) -> {
- if (id == R.id.btn_delete) {
- boolean value = result.get(R.id.btn_deleteAll) != 0;
- UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
- // TODO: Fix crash (tdlib.clearCallsHistory(value);)
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative)
- );
+ clearRecentCalls();
}
return false;
}
@@ -826,6 +810,25 @@ public boolean onLongClick (View v) {
return false;
}
+ public void clearRecentCalls () {
+ showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
+ .setRawItems(
+ new ListItem[]{
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((id, result) -> {
+ if (id == R.id.btn_delete) {
+ boolean value = result.get(R.id.btn_deleteAll) != 0;
+ UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
+ // TODO: Fix crash (tdlib.clearCallsHistory(value);)
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative)
+ );
+ }
+
@Override
public void onClick (View v) {
int viewId = v.getId();
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java b/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
index d228dc6e2e..9577222431 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
@@ -27,6 +27,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.widget.Toast;
import androidx.annotation.Dimension;
import androidx.annotation.DrawableRes;
@@ -36,6 +37,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.Px;
+import org.thunderdog.challegram.R;
import org.thunderdog.challegram.U;
import org.thunderdog.challegram.component.sticker.TGStickerObj;
import org.thunderdog.challegram.core.Lang;
@@ -50,7 +52,10 @@
import org.thunderdog.challegram.tool.Drawables;
import org.thunderdog.challegram.tool.Paints;
import org.thunderdog.challegram.tool.Screen;
+import org.thunderdog.challegram.tool.UI;
import org.thunderdog.challegram.tool.Views;
+import org.thunderdog.challegram.ui.ListItem;
+import org.thunderdog.challegram.unsorted.Settings;
import org.thunderdog.challegram.util.DrawableProvider;
import org.thunderdog.challegram.util.text.Counter;
import org.thunderdog.challegram.util.text.Text;
@@ -350,15 +355,37 @@ private BackgroundView newBackgroundView (int i) {
public boolean onLongClick (View v) {
if (listener != null && v instanceof BackgroundView) {
BackgroundView backgroundView = (BackgroundView) v;
+ int bgViewIndex = backgroundView.index;
+ if (!Settings.instance().chatFoldersEnabled() && bgViewIndex == 1) {
+ clearRecentCalls();
+ }
if (backgroundView.inSlideOff()) {
return false;
}
backgroundView.cancelSlideOff();
- return listener.onPagerItemLongClick(backgroundView.index);
+ return listener.onPagerItemLongClick(bgViewIndex);
}
return false;
}
+ public void clearRecentCalls () {
+ // TODO: show the settings
+ new SettingsWrapBuilder(R.id.btn_delete)
+ .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
+ .setRawItems(
+ new ListItem[]{
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((id, result) -> {
+ if (id == R.id.btn_delete) {
+ boolean value = result.get(R.id.btn_deleteAll) != 0;
+ UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
+ // TODO: Fix crash (tdlib.clearCallsHistory(value);)
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative);
+ }
private int totalWidth;
public void setItems (String[] stringItems) {
From 022de5fff3d2a42607837a2e7adfb08e3f1fbbea Mon Sep 17 00:00:00 2001
From: nick <64551534+null-nick@users.noreply.github.com>
Date: Thu, 13 Mar 2025 01:03:53 +0100
Subject: [PATCH 4/7] implemented clear recent
---
.../navigation/DrawerController.java | 11 ++--
.../navigation/ViewPagerTopView.java | 29 +--------
.../thunderdog/challegram/telegram/Tdlib.java | 22 +++++--
.../challegram/ui/CallListController.java | 60 ++++++++++++++++++-
.../challegram/ui/MainController.java | 29 +++++++++
app/src/main/res/values/ids.xml | 4 ++
app/src/main/res/values/strings.xml | 1 +
7 files changed, 116 insertions(+), 40 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
index b5b370a6a2..3faab3f398 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
@@ -796,6 +796,7 @@ public boolean onLongClick (View v) {
});
} else if (itemId == R.id.btn_calls) {
clearRecentCalls();
+ return true;
}
return false;
}
@@ -816,9 +817,11 @@ public void clearRecentCalls () {
})
.setIntDelegate((id, result) -> {
if (id == R.id.btn_delete) {
- boolean value = result.get(R.id.btn_deleteAll) != 0;
- UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
- // TODO: Fix crash (tdlib.clearCallsHistory(value);)
+ context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
+ if (success) {
+ UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
+ }
+ });
}
})
.setSaveStr(R.string.Delete)
@@ -1458,4 +1461,4 @@ public static DrawerHolder create (Context context, int viewType, View.OnClickLi
throw new IllegalArgumentException("viewType == " + viewType);
}
}*/
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java b/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
index e98f6264fa..4835822504 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/ViewPagerTopView.java
@@ -35,7 +35,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
-import android.widget.Toast;
import androidx.annotation.CheckResult;
import androidx.annotation.Dimension;
@@ -47,7 +46,6 @@
import androidx.annotation.Px;
import androidx.core.view.ViewCompat;
-import org.thunderdog.challegram.R;
import org.thunderdog.challegram.BuildConfig;
import org.thunderdog.challegram.U;
import org.thunderdog.challegram.component.sticker.TGStickerObj;
@@ -63,10 +61,7 @@
import org.thunderdog.challegram.tool.Drawables;
import org.thunderdog.challegram.tool.Paints;
import org.thunderdog.challegram.tool.Screen;
-import org.thunderdog.challegram.tool.UI;
import org.thunderdog.challegram.tool.Views;
-import org.thunderdog.challegram.ui.ListItem;
-import org.thunderdog.challegram.unsorted.Settings;
import org.thunderdog.challegram.util.DrawableProvider;
import org.thunderdog.challegram.util.text.Counter;
import org.thunderdog.challegram.util.text.IconSpan;
@@ -513,37 +508,15 @@ private BackgroundView newBackgroundView (int i) {
public boolean onLongClick (View v) {
if (listener != null && v instanceof BackgroundView) {
BackgroundView backgroundView = (BackgroundView) v;
- int bgViewIndex = backgroundView.index;
- if (!Settings.instance().chatFoldersEnabled() && bgViewIndex == 1) {
- clearRecentCalls();
- }
if (backgroundView.inSlideOff()) {
return false;
}
backgroundView.cancelSlideOff();
- return listener.onPagerItemLongClick(bgViewIndex);
+ return listener.onPagerItemLongClick(backgroundView.index);
}
return false;
}
- public void clearRecentCalls () {
- // TODO: show the settings
- new SettingsWrapBuilder(R.id.btn_delete)
- .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
- .setRawItems(
- new ListItem[]{
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((id, result) -> {
- if (id == R.id.btn_delete) {
- boolean value = result.get(R.id.btn_deleteAll) != 0;
- UI.showToast(String.format("VALUE: %b", value), Toast.LENGTH_SHORT);
- // TODO: Fix crash (tdlib.clearCallsHistory(value);)
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative);
- }
private int totalWidth;
private int maxStableWidth;
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
index 480534cc9a..2bb5fa0582 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
@@ -34,6 +34,7 @@
import androidx.collection.LongSparseArray;
import androidx.collection.SparseArrayCompat;
import androidx.core.os.CancellationSignal;
+import androidx.core.util.Consumer;
import androidx.core.util.Pair;
import com.google.android.gms.tasks.Task;
@@ -99,6 +100,7 @@
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
@@ -10701,13 +10703,21 @@ public boolean canEditSlowMode (long chatId) {
return false;
}
- public void clearCallsHistory (boolean revoke) {
- tdlib().send(new TdApi.DeleteAllCallMessages(revoke), (result, error) -> {
- if (result != null) {
- UI.showToast(String.format("%s",result), Toast.LENGTH_SHORT);
+ public void clearCallsHistory(boolean revoke, Consumer callback) {
+ var _TAG = "ClearCallsHistory";
+ client().send(new TdApi.DeleteAllCallMessages(revoke), object -> {
+ if (object instanceof TdApi.Ok) {
+ Log.d(_TAG, "Call history cleared successfully." + (revoke ? " All call messages have been revoked." : ""));
+ callback.accept(true);
+ } else if (object instanceof TdApi.Error) {
+ TdApi.Error error = (TdApi.Error) object;
+ Log.e(_TAG, String.format(Locale.US, "Error clearing call history: Code %d, Message: %s", error.code, error.message));
+ callback.accept(false);
} else {
- UI.showToast(String.format("%s", error), Toast.LENGTH_SHORT);
- }});
+ Log.w(_TAG, "Unexpected response from TDLib: " + object);
+ callback.accept(false);
+ }
+ });
}
public boolean isBroadcastGroup (long chatId) {
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
index 3ed303fe58..e33273cb49 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
@@ -16,7 +16,9 @@
import android.content.Context;
import android.view.View;
+import android.widget.LinearLayout;
import android.widget.TextView;
+import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -33,6 +35,8 @@
import org.thunderdog.challegram.data.CallItem;
import org.thunderdog.challegram.data.CallSection;
import org.thunderdog.challegram.data.TGFoundChat;
+import org.thunderdog.challegram.navigation.HeaderView;
+import org.thunderdog.challegram.navigation.MoreDelegate;
import org.thunderdog.challegram.navigation.SettingsWrapBuilder;
import org.thunderdog.challegram.navigation.ViewController;
import org.thunderdog.challegram.telegram.DateChangeListener;
@@ -41,6 +45,7 @@
import org.thunderdog.challegram.telegram.TdlibOptionListener;
import org.thunderdog.challegram.theme.ColorId;
import org.thunderdog.challegram.tool.Screen;
+import org.thunderdog.challegram.tool.UI;
import org.thunderdog.challegram.tool.Views;
import org.thunderdog.challegram.unsorted.Settings;
import org.thunderdog.challegram.util.StringList;
@@ -65,6 +70,7 @@ public class CallListController extends RecyclerViewController implements
View.OnClickListener,
Client.ResultHandler,
MessageListener,
+ MoreDelegate,
DateChangeListener,
View.OnLongClickListener,
BaseView.ActionListProvider, TdlibOptionListener {
@@ -82,6 +88,56 @@ public CharSequence getName () {
return Lang.getString(R.string.Calls);
}
+ @Override
+ protected int getMenuId () {
+ return messages != null && !messages.isEmpty() ? R.id.menu_btn_more : 0;
+ }
+
+ @Override
+ public void fillMenuItems (int id, HeaderView header, LinearLayout menu) {
+ if (id == R.id.menu_btn_more) {
+ header.addMoreButton(menu, this);
+ }
+ }
+
+ @Override
+ public void onMenuItemPressed (int id, View view) {
+ if (id == R.id.menu_btn_more) {
+ showMore(new int[] {R.id.btn_clear_recent_calls}, new String[] {Lang.getString(R.string.ClearRecentCalls)});
+ }
+ }
+
+ @Override
+ public void onMoreItemPressed (int id) {
+ if (id == R.id.btn_clear_recent_calls) {
+ showClearCallsConfirmationDialog();
+ }
+ }
+
+ public boolean hasRecentCalls() {
+ return messages != null && !messages.isEmpty();
+ }
+
+ private void showClearCallsConfirmationDialog() {
+ showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
+ .setRawItems(new ListItem[] {
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((_id, result) -> {
+ if (_id == R.id.btn_delete) {
+ context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
+ if (success) {
+ UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
+ }
+ });
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative)
+ );
+ }
+
private SettingsAdapter adapter;
@Override
@@ -279,7 +335,7 @@ private ListItem newPeopleItem () {
}
private void removeTopChat (final TGFoundChat chat) {
- showOptions(Lang.getStringBold(R.string.ChatHintsDelete, chat.getTitle()), new int[]{R.id.btn_delete, R.id.btn_cancel}, new String[]{Lang.getString(R.string.Delete), Lang.getString(R.string.Cancel)}, new int[]{OptionColor.RED, OptionColor.NORMAL}, new int[]{R.drawable.baseline_delete_sweep_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
+ showOptions(Lang.getStringBold(R.string.ChatHintsDelete, chat.getTitle()), new int[] {R.id.btn_delete, R.id.btn_cancel}, new String[] {Lang.getString(R.string.Delete), Lang.getString(R.string.Cancel)}, new int[] {OptionColor.RED, OptionColor.NORMAL}, new int[] {R.drawable.baseline_delete_sweep_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
if (id == R.id.btn_delete) {
tdlib.client().send(new TdApi.RemoveTopChat(new TdApi.TopChatCategoryCalls(), chat.getChatId()), tdlib.okHandler());
if (hasTopChats()) {
@@ -617,7 +673,7 @@ public boolean onLongClick (View v) {
final long chatId = call.getChatId();
final long[] messageIdsToDelete = call.getMessageIds();
if (messageIdsToDelete != null) {
- showOptions(null, new int[]{R.id.btn_deleteAll, R.id.btn_openChat, R.id.btn_cancel}, new String[]{Lang.getString(R.string.DeleteEntry), Lang.getString(R.string.OpenChat), Lang.getString(R.string.Cancel)}, new int[]{OptionColor.RED, OptionColor.NORMAL, OptionColor.NORMAL}, new int[]{R.drawable.baseline_delete_sweep_24, R.drawable.baseline_chat_bubble_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
+ showOptions(null, new int[] {R.id.btn_deleteAll, R.id.btn_openChat, R.id.btn_cancel}, new String[] {Lang.getString(R.string.DeleteEntry), Lang.getString(R.string.OpenChat), Lang.getString(R.string.Cancel)}, new int[] {OptionColor.RED, OptionColor.NORMAL, OptionColor.NORMAL}, new int[] {R.drawable.baseline_delete_sweep_24, R.drawable.baseline_chat_bubble_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
if (id == R.id.btn_deleteAll) {
tdlib.deleteMessages(chatId, messageIdsToDelete, false);
} else if (id == R.id.btn_openChat) {
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/MainController.java b/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
index c8d48a8793..cee7fd851b 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
@@ -1455,10 +1455,39 @@ public boolean onPagerItemLongClick (int index) {
TdApi.ChatList chatList = pagerChatLists.get(index);
showChatListOptions(chatList);
return true;
+ } else if (index == POSITION_CALLS) {
+ ViewController> controller = getCachedControllerForPosition(index);
+ if (controller instanceof CallListController) {
+ CallListController callListController = (CallListController) controller;
+ if (callListController.hasRecentCalls()) {
+ showClearCallsConfirmationDialog();
+ return true;
+ }
+ }
}
return false;
}
+ private void showClearCallsConfirmationDialog() {
+ showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
+ .setRawItems(new ListItem[] {
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((_id, result) -> {
+ if (_id == R.id.btn_delete) {
+ context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
+ if (success) {
+ UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
+ }
+ });
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative)
+ );
+ }
+
private ChatsController newChatsController (TdApi.ChatList chatList, @Filter int filter) {
ChatsController chats = new ChatsController(this.context, tdlib).setParent(this);
ChatFilter chatFilter;
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
index 97cfeb9b7f..5bd5109c0e 100644
--- a/app/src/main/res/values/ids.xml
+++ b/app/src/main/res/values/ids.xml
@@ -1410,4 +1410,8 @@
+
+
+
+
\ 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 c763273d36..dc287ea3ce 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5568,4 +5568,5 @@
%1$s monthly users
Do you want to delete all recent calls?
+ Clear recent calls
From 2da5fc650154a3df335fff25f20b74838c994936 Mon Sep 17 00:00:00 2001
From: nick <64551534+null-nick@users.noreply.github.com>
Date: Thu, 13 Mar 2025 01:08:38 +0100
Subject: [PATCH 5/7] fixed broken indent
---
.../java/org/thunderdog/challegram/ui/CallListController.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
index e33273cb49..985ed466f8 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
@@ -335,7 +335,7 @@ private ListItem newPeopleItem () {
}
private void removeTopChat (final TGFoundChat chat) {
- showOptions(Lang.getStringBold(R.string.ChatHintsDelete, chat.getTitle()), new int[] {R.id.btn_delete, R.id.btn_cancel}, new String[] {Lang.getString(R.string.Delete), Lang.getString(R.string.Cancel)}, new int[] {OptionColor.RED, OptionColor.NORMAL}, new int[] {R.drawable.baseline_delete_sweep_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
+ showOptions(Lang.getStringBold(R.string.ChatHintsDelete, chat.getTitle()), new int[]{R.id.btn_delete, R.id.btn_cancel}, new String[]{Lang.getString(R.string.Delete), Lang.getString(R.string.Cancel)}, new int[]{OptionColor.RED, OptionColor.NORMAL}, new int[]{R.drawable.baseline_delete_sweep_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
if (id == R.id.btn_delete) {
tdlib.client().send(new TdApi.RemoveTopChat(new TdApi.TopChatCategoryCalls(), chat.getChatId()), tdlib.okHandler());
if (hasTopChats()) {
@@ -673,7 +673,7 @@ public boolean onLongClick (View v) {
final long chatId = call.getChatId();
final long[] messageIdsToDelete = call.getMessageIds();
if (messageIdsToDelete != null) {
- showOptions(null, new int[] {R.id.btn_deleteAll, R.id.btn_openChat, R.id.btn_cancel}, new String[] {Lang.getString(R.string.DeleteEntry), Lang.getString(R.string.OpenChat), Lang.getString(R.string.Cancel)}, new int[] {OptionColor.RED, OptionColor.NORMAL, OptionColor.NORMAL}, new int[] {R.drawable.baseline_delete_sweep_24, R.drawable.baseline_chat_bubble_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
+ showOptions(null, new int[]{R.id.btn_deleteAll, R.id.btn_openChat, R.id.btn_cancel}, new String[]{Lang.getString(R.string.DeleteEntry), Lang.getString(R.string.OpenChat), Lang.getString(R.string.Cancel)}, new int[]{OptionColor.RED, OptionColor.NORMAL, OptionColor.NORMAL}, new int[]{R.drawable.baseline_delete_sweep_24, R.drawable.baseline_chat_bubble_24, R.drawable.baseline_cancel_24}, (itemView, id) -> {
if (id == R.id.btn_deleteAll) {
tdlib.deleteMessages(chatId, messageIdsToDelete, false);
} else if (id == R.id.btn_openChat) {
From f833580e22e5a4278724048784b330891f5c8c6f Mon Sep 17 00:00:00 2001
From: "nick." <64551534+null-nick@users.noreply.github.com>
Date: Sun, 31 May 2026 15:00:24 +0200
Subject: [PATCH 6/7] Deduplicate clear call history confirmation into
`TdlibUi`
---
.../navigation/DrawerController.java | 25 ++--------------
.../thunderdog/challegram/telegram/Tdlib.java | 19 ++----------
.../challegram/telegram/TdlibUi.java | 18 ++++++++++++
.../challegram/ui/CallListController.java | 26 ++---------------
.../challegram/ui/MainController.java | 29 ++-----------------
app/src/main/res/values/ids.xml | 3 +-
6 files changed, 28 insertions(+), 92 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
index 8a73f72bfb..4e551ac864 100644
--- a/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
+++ b/app/src/main/java/org/thunderdog/challegram/navigation/DrawerController.java
@@ -819,7 +819,7 @@ public boolean onLongClick (View v) {
}
});
} else if (itemId == R.id.btn_calls) {
- clearRecentCalls();
+ context.currentTdlib().ui().showClearCallHistoryOptions(this);
return true;
}
return false;
@@ -832,27 +832,6 @@ public boolean onLongClick (View v) {
return false;
}
- public void clearRecentCalls () {
- showSettings(new SettingsWrapBuilder(R.id.btn_delete)
- .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
- .setRawItems(
- new ListItem[]{
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((id, result) -> {
- if (id == R.id.btn_delete) {
- context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
- if (success) {
- UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
- }
- });
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative)
- );
- }
-
@Override
public void onClick (View v) {
int viewId = v.getId();
@@ -1525,4 +1504,4 @@ public static DrawerHolder create (Context context, int viewType, View.OnClickLi
throw new IllegalArgumentException("viewType == " + viewType);
}
}*/
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
index d211ee8952..dbae291599 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/Tdlib.java
@@ -34,7 +34,6 @@
import androidx.collection.LongSparseArray;
import androidx.collection.SparseArrayCompat;
import androidx.core.os.CancellationSignal;
-import androidx.core.util.Consumer;
import androidx.core.util.Pair;
import com.google.android.gms.tasks.Task;
@@ -100,7 +99,6 @@
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
@@ -10944,21 +10942,8 @@ public boolean canEditSlowMode (long chatId) {
return false;
}
- public void clearCallsHistory(boolean revoke, Consumer callback) {
- var _TAG = "ClearCallsHistory";
- client().send(new TdApi.DeleteAllCallMessages(revoke), object -> {
- if (object instanceof TdApi.Ok) {
- Log.d(_TAG, "Call history cleared successfully." + (revoke ? " All call messages have been revoked." : ""));
- callback.accept(true);
- } else if (object instanceof TdApi.Error) {
- TdApi.Error error = (TdApi.Error) object;
- Log.e(_TAG, String.format(Locale.US, "Error clearing call history: Code %d, Message: %s", error.code, error.message));
- callback.accept(false);
- } else {
- Log.w(_TAG, "Unexpected response from TDLib: " + object);
- callback.accept(false);
- }
- });
+ public void clearCallsHistory (boolean revoke, @Nullable Runnable after) {
+ send(new TdApi.DeleteAllCallMessages(revoke), okHandler(after));
}
public boolean isBroadcastGroup (long chatId) {
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java b/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
index 6bcaffb7b0..948a871464 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
@@ -595,6 +595,24 @@ public void showDeleteOptions (ViewController> context, MessageWithProperties
showDeleteOptions(context, new MessageWithProperties[] {message}, null);
}
+ public void showClearCallHistoryOptions (ViewController> context) {
+ context.showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .addHeaderItem(Lang.getString(R.string.AreYouSureClearCalls))
+ .setRawItems(new ListItem[] {
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
+ })
+ .setIntDelegate((id, result) -> {
+ if (id == R.id.btn_delete) {
+ boolean revoke = result.get(R.id.btn_deleteAll) != 0;
+ tdlib.clearCallsHistory(revoke, () ->
+ UI.showToast(R.string.Done, Toast.LENGTH_SHORT)
+ );
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative));
+ }
+
public void showDeleteOptions (final ViewController> context, final MessageWithProperties[] messages, final @Nullable Runnable after) {
if (context != null && messages != null && messages.length > 0) {
if (deleteSuperGroupMessages(context, messages, after)) {
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
index 91bc057964..da79db929f 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/CallListController.java
@@ -18,7 +18,6 @@
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -45,7 +44,6 @@
import org.thunderdog.challegram.telegram.TdlibOptionListener;
import org.thunderdog.challegram.theme.ColorId;
import org.thunderdog.challegram.tool.Screen;
-import org.thunderdog.challegram.tool.UI;
import org.thunderdog.challegram.tool.Views;
import org.thunderdog.challegram.unsorted.Settings;
import org.thunderdog.challegram.util.StringList;
@@ -111,34 +109,14 @@ public void onMenuItemPressed (int id, View view) {
@Override
public void onMoreItemPressed (int id) {
if (id == R.id.btn_clear_recent_calls) {
- showClearCallsConfirmationDialog();
+ tdlib.ui().showClearCallHistoryOptions(this);
}
}
- public boolean hasRecentCalls() {
+ public boolean hasRecentCalls () {
return messages != null && !messages.isEmpty();
}
- private void showClearCallsConfirmationDialog() {
- showSettings(new SettingsWrapBuilder(R.id.btn_delete)
- .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
- .setRawItems(new ListItem[] {
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((_id, result) -> {
- if (_id == R.id.btn_delete) {
- context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
- if (success) {
- UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
- }
- });
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative)
- );
- }
-
private SettingsAdapter adapter;
@Override
diff --git a/app/src/main/java/org/thunderdog/challegram/ui/MainController.java b/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
index 06085ceae5..d713b3e4e8 100644
--- a/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
+++ b/app/src/main/java/org/thunderdog/challegram/ui/MainController.java
@@ -1484,37 +1484,14 @@ public boolean onPagerItemLongClick (int index) {
return true;
} else if (index == POSITION_CALLS) {
ViewController> controller = getCachedControllerForPosition(index);
- if (controller instanceof CallListController) {
- CallListController callListController = (CallListController) controller;
- if (callListController.hasRecentCalls()) {
- showClearCallsConfirmationDialog();
- return true;
- }
+ if (controller instanceof CallListController && ((CallListController) controller).hasRecentCalls()) {
+ tdlib.ui().showClearCallHistoryOptions(this);
+ return true;
}
}
return false;
}
- private void showClearCallsConfirmationDialog() {
- showSettings(new SettingsWrapBuilder(R.id.btn_delete)
- .setHeaderItem(new ListItem(ListItem.TYPE_INFO, R.id.text_title, 0, R.string.AreYouSureClearCalls, false))
- .setRawItems(new ListItem[] {
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((_id, result) -> {
- if (_id == R.id.btn_delete) {
- context.currentTdlib().clearCallsHistory(result.get(R.id.btn_deleteAll) != 0, success -> {
- if (success) {
- UI.showToast(R.string.Done, Toast.LENGTH_SHORT);
- }
- });
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative)
- );
- }
-
private ChatsController newChatsController (TdApi.ChatList chatList, @Filter int filter) {
ChatsController chats = new ChatsController(this.context, tdlib).setParent(this);
ChatFilter chatFilter;
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
index a0ffcf09b8..cb92d0290f 100644
--- a/app/src/main/res/values/ids.xml
+++ b/app/src/main/res/values/ids.xml
@@ -1416,7 +1416,6 @@
-
-
\ No newline at end of file
+
From 9ca3666cce6afb5d2fd562976689b2c7c7229436 Mon Sep 17 00:00:00 2001
From: "nick." <64551534+null-nick@users.noreply.github.com>
Date: Sun, 12 Jul 2026 23:46:42 +0200
Subject: [PATCH 7/7] Skip clear-calls-history dialog when there are no recent
calls
---
.../challegram/telegram/TdlibUi.java | 37 +++++++++++--------
app/src/main/res/values/strings.xml | 1 +
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java b/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
index 3a67c910c3..9ed61a32bc 100644
--- a/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
+++ b/app/src/main/java/org/thunderdog/challegram/telegram/TdlibUi.java
@@ -596,21 +596,28 @@ public void showDeleteOptions (ViewController> context, MessageWithProperties
}
public void showClearCallHistoryOptions (ViewController> context) {
- context.showSettings(new SettingsWrapBuilder(R.id.btn_delete)
- .addHeaderItem(Lang.getString(R.string.AreYouSureClearCalls))
- .setRawItems(new ListItem[] {
- new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteForEveryone, false)
- })
- .setIntDelegate((id, result) -> {
- if (id == R.id.btn_delete) {
- boolean revoke = result.get(R.id.btn_deleteAll) != 0;
- tdlib.clearCallsHistory(revoke, () ->
- UI.showToast(R.string.Done, Toast.LENGTH_SHORT)
- );
- }
- })
- .setSaveStr(R.string.Delete)
- .setSaveColorId(ColorId.textNegative));
+ tdlib.send(new TdApi.SearchCallMessages("", 1, false), (result, error) -> {
+ if (error != null || result.messages.length == 0) {
+ return;
+ }
+ context.runOnUiThreadOptional(() ->
+ context.showSettings(new SettingsWrapBuilder(R.id.btn_delete)
+ .addHeaderItem(Lang.getString(R.string.AreYouSureClearCalls))
+ .setRawItems(new ListItem[] {
+ new ListItem(ListItem.TYPE_CHECKBOX_OPTION, R.id.btn_deleteAll, 0, R.string.DeleteCallsForEveryone, false)
+ })
+ .setIntDelegate((id, result2) -> {
+ if (id == R.id.btn_delete) {
+ boolean revoke = result2.get(R.id.btn_deleteAll) != 0;
+ tdlib.clearCallsHistory(revoke, () ->
+ UI.showToast(R.string.Done, Toast.LENGTH_SHORT)
+ );
+ }
+ })
+ .setSaveStr(R.string.Delete)
+ .setSaveColorId(ColorId.textNegative))
+ );
+ });
}
public void showDeleteOptions (final ViewController> context, final MessageWithProperties[] messages, final @Nullable Runnable after) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b9f34fbb85..a203a5956d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5724,6 +5724,7 @@
Do you want to delete all recent calls?
Clear recent calls
+ Delete for everyone
Restricted Content
Sensitive Content