diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java index a91e76687..7928cb1b4 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java @@ -139,6 +139,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.hutool.core.util.StrUtil; +import kotlin.Unit; +import tw.nekomimi.nekogram.BottomBuilder; import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.NekoXConfig; import tw.nekomimi.nekogram.utils.AlertUtil; @@ -2495,18 +2497,18 @@ public class AndroidUtilities { } } if (Build.VERSION.SDK_INT >= 24) { - intent.setDataAndType(FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", f), realMimeType != null ? realMimeType : "text/plain"); + intent.setDataAndType(FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", f), realMimeType != null ? realMimeType : "*/*"); } else { - intent.setDataAndType(Uri.fromFile(f), realMimeType != null ? realMimeType : "text/plain"); + intent.setDataAndType(Uri.fromFile(f), realMimeType != null ? realMimeType : "*/*"); } if (realMimeType != null) { try { activity.startActivityForResult(intent, 500); } catch (Exception e) { if (Build.VERSION.SDK_INT >= 24) { - intent.setDataAndType(FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", f), "text/plain"); + intent.setDataAndType(FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", f), "*/*"); } else { - intent.setDataAndType(Uri.fromFile(f), "text/plain"); + intent.setDataAndType(Uri.fromFile(f), "*/*"); } activity.startActivityForResult(intent, 500); } @@ -2559,17 +2561,17 @@ public class AndroidUtilities { } } if (Build.VERSION.SDK_INT >= 26 && realMimeType != null && realMimeType.equals("application/vnd.android.package-archive") && !ApplicationLoader.applicationContext.getPackageManager().canRequestPackageInstalls()) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); - builder.setMessage(LocaleController.getString("ApkRestricted", R.string.ApkRestricted)); - builder.setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + BottomBuilder builder = new BottomBuilder(activity); + builder.addTitle(LocaleController.getString("ApkRestricted", R.string.ApkRestricted)); + builder.addItem(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), R.drawable.baseline_settings_24,(i) -> { try { activity.startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + activity.getPackageName()))); } catch (Exception e) { FileLog.e(e); } + return Unit.INSTANCE; }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.addCancelItem(); builder.show(); return true; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index e99bcc8d9..efc0fa027 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -58,6 +58,7 @@ import java.util.concurrent.CountDownLatch; import tw.nekomimi.nekogram.ExternalGcm; import tw.nekomimi.nekogram.InternalFilters; import tw.nekomimi.nekogram.NekoConfig; +import tw.nekomimi.nekogram.utils.AlertUtil; import tw.nekomimi.nekogram.utils.ThreadUtil; import tw.nekomimi.nekogram.utils.UIUtil; @@ -12622,14 +12623,7 @@ public class MessagesController extends BaseController implements NotificationCe } private static void showCantOpenAlert(BaseFragment fragment, String reason) { - if (fragment == null || fragment.getParentActivity() == null) { - return; - } - AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getParentActivity()); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - builder.setMessage(reason); - fragment.showDialog(builder.create()); + AlertUtil.showToast(reason); } public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SecretChatHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SecretChatHelper.java index ff15aaa72..b6589737b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SecretChatHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SecretChatHelper.java @@ -30,6 +30,8 @@ import java.util.Collections; import java.util.Locale; import java.util.concurrent.ConcurrentHashMap; +import tw.nekomimi.nekogram.utils.AlertUtil; + public class SecretChatHelper extends BaseController { public static class TL_decryptedMessageHolder extends TLObject { @@ -1950,25 +1952,12 @@ public class SecretChatHelper extends BaseController { }); } else { delayedEncryptedChatUpdates.clear(); - AndroidUtilities.runOnUIThread(() -> { - if (!((Activity) context).isFinishing()) { - startingSecretChat = false; - try { - progressDialog.dismiss(); - } catch (Exception e) { - FileLog.e(e); - } - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); - builder.setMessage(LocaleController.getString("CreateEncryptedChatError", R.string.CreateEncryptedChatError)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - builder.show().setCanceledOnTouchOutside(true); - } - }); + AlertUtil.showToast(error); } }, ConnectionsManager.RequestFlagFailOnServerErrors); } else { delayedEncryptedChatUpdates.clear(); + AlertUtil.showToast(error); AndroidUtilities.runOnUIThread(() -> { startingSecretChat = false; if (!((Activity) context).isFinishing()) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionIntroActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionIntroActivity.java index f701f0c57..7fdb0d90b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionIntroActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionIntroActivity.java @@ -56,6 +56,9 @@ import org.telegram.ui.Components.URLSpanNoUnderline; import java.util.ArrayList; +import kotlin.Unit; +import tw.nekomimi.nekogram.BottomBuilder; + @TargetApi(23) public class ActionIntroActivity extends BaseFragment implements LocationController.LocationFetchCallback { @@ -544,11 +547,13 @@ public class ActionIntroActivity extends BaseFragment implements LocationControl break; } case ACTION_TYPE_CHANGE_PHONE_NUMBER: { - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("PhoneNumberChangeTitle", R.string.PhoneNumberChangeTitle)); - builder.setMessage(LocaleController.getString("PhoneNumberAlert", R.string.PhoneNumberAlert)); - builder.setPositiveButton(LocaleController.getString("Change", R.string.Change), (dialogInterface, i) -> presentFragment(new ChangePhoneActivity(), true)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + BottomBuilder builder = new BottomBuilder(getParentActivity()); + builder.addTitle(LocaleController.getString("PhoneNumberAlert", R.string.PhoneNumberAlert)); + builder.addItem(LocaleController.getString("Change", R.string.Change), (i) -> { + presentFragment(new ChangePhoneActivity(), true); + return Unit.INSTANCE; + }); + builder.addCancelItem(); showDialog(builder.create()); break; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CacheControlActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/CacheControlActivity.java index 7ba0726a2..e6d5790c4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CacheControlActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CacheControlActivity.java @@ -68,6 +68,8 @@ import org.telegram.ui.Components.UndoView; import java.io.File; import java.util.ArrayList; +import kotlin.Unit; +import tw.nekomimi.nekogram.BottomBuilder; import tw.nekomimi.nekogram.transtale.TranslateDb; import tw.nekomimi.nekogram.utils.EnvUtil; import tw.nekomimi.nekogram.utils.FileUtil; @@ -544,13 +546,11 @@ public class CacheControlActivity extends BaseFragment { } private void clearDatabase() { - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("LocalDatabaseClearTextTitle", R.string.LocalDatabaseClearTextTitle)); - builder.setMessage(LocaleController.getString("LocalDatabaseClearText", R.string.LocalDatabaseClearText)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - builder.setPositiveButton(LocaleController.getString("CacheClear", R.string.CacheClear), (dialogInterface, i) -> { + BottomBuilder builder = new BottomBuilder(getParentActivity()); + builder.addTitle(LocaleController.getString("LocalDatabaseClearTextTitle", R.string.LocalDatabaseClearTextTitle), LocaleController.getString("LocalDatabaseClearText", R.string.LocalDatabaseClearText)); + builder.addItem(LocaleController.getString("CacheClear", R.string.CacheClear),R.drawable.baseline_delete_sweep_24, true, (i) -> { if (getParentActivity() == null) { - return; + return Unit.INSTANCE; } final AlertDialog progressDialog = new AlertDialog(getParentActivity(), 3); progressDialog.setCanCacnel(false); @@ -650,13 +650,10 @@ public class CacheControlActivity extends BaseFragment { }); } }); + return Unit.INSTANCE; }); - AlertDialog alertDialog = builder.create(); - showDialog(alertDialog); - TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); - if (button != null) { - button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2)); - } + builder.addCancelItem(); + builder.show(); } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CallLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/CallLogActivity.java index 7a2fd7147..d86d07dd4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CallLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CallLogActivity.java @@ -23,6 +23,9 @@ import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessageObject; @@ -51,602 +54,602 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; +import kotlin.Unit; +import tw.nekomimi.nekogram.BottomBuilder; public class CallLogActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { - private ListAdapter listViewAdapter; - private EmptyTextProgressView emptyView; - private LinearLayoutManager layoutManager; - private RecyclerListView listView; - private ImageView floatingButton; + private ListAdapter listViewAdapter; + private EmptyTextProgressView emptyView; + private LinearLayoutManager layoutManager; + private RecyclerListView listView; + private ImageView floatingButton; - private ArrayList calls = new ArrayList<>(); - private boolean loading; - private boolean firstLoaded; - private boolean endReached; + private ArrayList calls = new ArrayList<>(); + private boolean loading; + private boolean firstLoaded; + private boolean endReached; - private int prevPosition; - private int prevTop; - private boolean scrollUpdated; - private boolean floatingHidden; - private final AccelerateDecelerateInterpolator floatingInterpolator = new AccelerateDecelerateInterpolator(); + private int prevPosition; + private int prevTop; + private boolean scrollUpdated; + private boolean floatingHidden; + private final AccelerateDecelerateInterpolator floatingInterpolator = new AccelerateDecelerateInterpolator(); - private Drawable greenDrawable; - private Drawable greenDrawable2; - private Drawable redDrawable; - private ImageSpan iconOut, iconIn, iconMissed; - private TLRPC.User lastCallUser; + private Drawable greenDrawable; + private Drawable greenDrawable2; + private Drawable redDrawable; + private ImageSpan iconOut, iconIn, iconMissed; + private TLRPC.User lastCallUser; - private static final int TYPE_OUT = 0; - private static final int TYPE_IN = 1; - private static final int TYPE_MISSED = 2; + private static final int TYPE_OUT = 0; + private static final int TYPE_IN = 1; + private static final int TYPE_MISSED = 2; - @Override - @SuppressWarnings("unchecked") - public void didReceivedNotification(int id, int account, Object... args) { - if (id == NotificationCenter.didReceiveNewMessages && firstLoaded) { - boolean scheduled = (Boolean) args[2]; - if (scheduled) { - return; - } - ArrayList arr = (ArrayList) args[1]; - for (MessageObject msg : arr) { - if (msg.messageOwner.action instanceof TLRPC.TL_messageActionPhoneCall) { - int userID = msg.messageOwner.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? msg.messageOwner.to_id.user_id : msg.messageOwner.from_id; - int callType = msg.messageOwner.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? TYPE_OUT : TYPE_IN; - TLRPC.PhoneCallDiscardReason reason = msg.messageOwner.action.reason; - if (callType == TYPE_IN && (reason instanceof TLRPC.TL_phoneCallDiscardReasonMissed || reason instanceof TLRPC.TL_phoneCallDiscardReasonBusy)) { - callType = TYPE_MISSED; - } - if (calls.size() > 0) { - CallLogRow topRow = calls.get(0); - if (topRow.user.id == userID && topRow.type == callType) { - topRow.calls.add(0, msg.messageOwner); - listViewAdapter.notifyItemChanged(0); - continue; - } - } - CallLogRow row = new CallLogRow(); - row.calls = new ArrayList<>(); - row.calls.add(msg.messageOwner); - row.user = MessagesController.getInstance(currentAccount).getUser(userID); - row.type = callType; - calls.add(0, row); - listViewAdapter.notifyItemInserted(0); - } - } - } else if (id == NotificationCenter.messagesDeleted && firstLoaded) { - boolean scheduled = (Boolean) args[2]; - if (scheduled) { - return; - } - boolean didChange = false; - ArrayList ids = (ArrayList) args[0]; - Iterator itrtr = calls.iterator(); - while (itrtr.hasNext()) { - CallLogRow row = itrtr.next(); - Iterator msgs = row.calls.iterator(); - while (msgs.hasNext()) { - TLRPC.Message msg = msgs.next(); - if (ids.contains(msg.id)) { - didChange = true; - msgs.remove(); - } - } - if (row.calls.size() == 0) - itrtr.remove(); - } - if (didChange && listViewAdapter != null) - listViewAdapter.notifyDataSetChanged(); - } - } + @Override + @SuppressWarnings("unchecked") + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.didReceiveNewMessages && firstLoaded) { + boolean scheduled = (Boolean) args[2]; + if (scheduled) { + return; + } + ArrayList arr = (ArrayList) args[1]; + for (MessageObject msg : arr) { + if (msg.messageOwner.action instanceof TLRPC.TL_messageActionPhoneCall) { + int userID = msg.messageOwner.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? msg.messageOwner.to_id.user_id : msg.messageOwner.from_id; + int callType = msg.messageOwner.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? TYPE_OUT : TYPE_IN; + TLRPC.PhoneCallDiscardReason reason = msg.messageOwner.action.reason; + if (callType == TYPE_IN && (reason instanceof TLRPC.TL_phoneCallDiscardReasonMissed || reason instanceof TLRPC.TL_phoneCallDiscardReasonBusy)) { + callType = TYPE_MISSED; + } + if (calls.size() > 0) { + CallLogRow topRow = calls.get(0); + if (topRow.user.id == userID && topRow.type == callType) { + topRow.calls.add(0, msg.messageOwner); + listViewAdapter.notifyItemChanged(0); + continue; + } + } + CallLogRow row = new CallLogRow(); + row.calls = new ArrayList<>(); + row.calls.add(msg.messageOwner); + row.user = MessagesController.getInstance(currentAccount).getUser(userID); + row.type = callType; + calls.add(0, row); + listViewAdapter.notifyItemInserted(0); + } + } + } else if (id == NotificationCenter.messagesDeleted && firstLoaded) { + boolean scheduled = (Boolean) args[2]; + if (scheduled) { + return; + } + boolean didChange = false; + ArrayList ids = (ArrayList) args[0]; + Iterator itrtr = calls.iterator(); + while (itrtr.hasNext()) { + CallLogRow row = itrtr.next(); + Iterator msgs = row.calls.iterator(); + while (msgs.hasNext()) { + TLRPC.Message msg = msgs.next(); + if (ids.contains(msg.id)) { + didChange = true; + msgs.remove(); + } + } + if (row.calls.size() == 0) + itrtr.remove(); + } + if (didChange && listViewAdapter != null) + listViewAdapter.notifyDataSetChanged(); + } + } - private class CustomCell extends FrameLayout { + private class CustomCell extends FrameLayout { - private ImageView imageView; - private ProfileSearchCell profileSearchCell; + private ImageView imageView; + private ProfileSearchCell profileSearchCell; - public CustomCell(Context context) { - super(context); + public CustomCell(Context context) { + super(context); - setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - profileSearchCell = new ProfileSearchCell(context); - profileSearchCell.setPadding(LocaleController.isRTL ? AndroidUtilities.dp(32) : 0, 0, LocaleController.isRTL ? 0 : AndroidUtilities.dp(32), 0); - profileSearchCell.setSublabelOffset(AndroidUtilities.dp(LocaleController.isRTL ? 2 : -2), -AndroidUtilities.dp(4)); - addView(profileSearchCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + profileSearchCell = new ProfileSearchCell(context); + profileSearchCell.setPadding(LocaleController.isRTL ? AndroidUtilities.dp(32) : 0, 0, LocaleController.isRTL ? 0 : AndroidUtilities.dp(32), 0); + profileSearchCell.setSublabelOffset(AndroidUtilities.dp(LocaleController.isRTL ? 2 : -2), -AndroidUtilities.dp(4)); + addView(profileSearchCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - imageView = new ImageView(context); - imageView.setImageResource(R.drawable.profile_phone); - imageView.setAlpha(214); - imageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); - imageView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 1)); - imageView.setScaleType(ImageView.ScaleType.CENTER); - imageView.setOnClickListener(callBtnClickListener); - imageView.setContentDescription(LocaleController.getString("Call", R.string.Call)); - addView(imageView, LayoutHelper.createFrame(48, 48, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.CENTER_VERTICAL, 8, 0, 8, 0)); - } - } + imageView = new ImageView(context); + imageView.setImageResource(R.drawable.profile_phone); + imageView.setAlpha(214); + imageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); + imageView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 1)); + imageView.setScaleType(ImageView.ScaleType.CENTER); + imageView.setOnClickListener(callBtnClickListener); + imageView.setContentDescription(LocaleController.getString("Call", R.string.Call)); + addView(imageView, LayoutHelper.createFrame(48, 48, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.CENTER_VERTICAL, 8, 0, 8, 0)); + } + } - private View.OnClickListener callBtnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - CallLogRow row = (CallLogRow) v.getTag(); - VoIPHelper.startCall(lastCallUser = row.user, getParentActivity(), null); - } - }; + private View.OnClickListener callBtnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + CallLogRow row = (CallLogRow) v.getTag(); + VoIPHelper.startCall(lastCallUser = row.user, getParentActivity(), null); + } + }; - @Override - public boolean onFragmentCreate() { - super.onFragmentCreate(); - getCalls(0, 50); + @Override + public boolean onFragmentCreate() { + super.onFragmentCreate(); + getCalls(0, 50); - NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.didReceiveNewMessages); - NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagesDeleted); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.didReceiveNewMessages); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagesDeleted); - return true; - } + return true; + } - @Override - public void onFragmentDestroy() { - super.onFragmentDestroy(); - NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.didReceiveNewMessages); - NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.messagesDeleted); - } + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.didReceiveNewMessages); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.messagesDeleted); + } - @Override - public View createView(Context context) { - greenDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_made_green_18dp).mutate(); - greenDrawable.setBounds(0, 0, greenDrawable.getIntrinsicWidth(), greenDrawable.getIntrinsicHeight()); - greenDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.SRC_IN)); - iconOut = new ImageSpan(greenDrawable, ImageSpan.ALIGN_BOTTOM); - greenDrawable2 = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate(); - greenDrawable2.setBounds(0, 0, greenDrawable2.getIntrinsicWidth(), greenDrawable2.getIntrinsicHeight()); - greenDrawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.SRC_IN)); - iconIn = new ImageSpan(greenDrawable2, ImageSpan.ALIGN_BOTTOM); - redDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate(); - redDrawable.setBounds(0, 0, redDrawable.getIntrinsicWidth(), redDrawable.getIntrinsicHeight()); - redDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedRedIcon), PorterDuff.Mode.SRC_IN)); - iconMissed = new ImageSpan(redDrawable, ImageSpan.ALIGN_BOTTOM); + @Override + public View createView(Context context) { + greenDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_made_green_18dp).mutate(); + greenDrawable.setBounds(0, 0, greenDrawable.getIntrinsicWidth(), greenDrawable.getIntrinsicHeight()); + greenDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.SRC_IN)); + iconOut = new ImageSpan(greenDrawable, ImageSpan.ALIGN_BOTTOM); + greenDrawable2 = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate(); + greenDrawable2.setBounds(0, 0, greenDrawable2.getIntrinsicWidth(), greenDrawable2.getIntrinsicHeight()); + greenDrawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedGreenIcon), PorterDuff.Mode.SRC_IN)); + iconIn = new ImageSpan(greenDrawable2, ImageSpan.ALIGN_BOTTOM); + redDrawable = getParentActivity().getResources().getDrawable(R.drawable.ic_call_received_green_18dp).mutate(); + redDrawable.setBounds(0, 0, redDrawable.getIntrinsicWidth(), redDrawable.getIntrinsicHeight()); + redDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_calls_callReceivedRedIcon), PorterDuff.Mode.SRC_IN)); + iconMissed = new ImageSpan(redDrawable, ImageSpan.ALIGN_BOTTOM); - actionBar.setBackButtonImage(R.drawable.ic_ab_back); - actionBar.setAllowOverlayTitle(true); - actionBar.setTitle(LocaleController.getString("Calls", R.string.Calls)); - actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { - @Override - public void onItemClick(int id) { - if (id == -1) { - finishFragment(); - } - } - }); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setAllowOverlayTitle(true); + actionBar.setTitle(LocaleController.getString("Calls", R.string.Calls)); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + finishFragment(); + } + } + }); - fragmentView = new FrameLayout(context); - fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray)); - FrameLayout frameLayout = (FrameLayout) fragmentView; + fragmentView = new FrameLayout(context); + fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray)); + FrameLayout frameLayout = (FrameLayout) fragmentView; - emptyView = new EmptyTextProgressView(context); - emptyView.setText(LocaleController.getString("NoCallLog", R.string.NoCallLog)); - frameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + emptyView = new EmptyTextProgressView(context); + emptyView.setText(LocaleController.getString("NoCallLog", R.string.NoCallLog)); + frameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - listView = new RecyclerListView(context); - listView.setEmptyView(emptyView); - listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); - listView.setAdapter(listViewAdapter = new ListAdapter(context)); - listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); - frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + listView = new RecyclerListView(context); + listView.setEmptyView(emptyView); + listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + listView.setAdapter(listViewAdapter = new ListAdapter(context)); + listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); + frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - listView.setOnItemClickListener((view, position) -> { - if (position < 0 || position >= calls.size()) { - return; - } - CallLogRow row = calls.get(position); - Bundle args = new Bundle(); - args.putInt("user_id", row.user.id); - args.putInt("message_id", row.calls.get(0).id); - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats); - presentFragment(new ChatActivity(args), true); - }); - listView.setOnItemLongClickListener((view, position) -> { - if (position < 0 || position >= calls.size()) { - return false; - } - final CallLogRow row = calls.get(position); - ArrayList items = new ArrayList<>(); - items.add(LocaleController.getString("Delete", R.string.Delete)); - if (VoIPHelper.canRateCall((TLRPC.TL_messageActionPhoneCall) row.calls.get(0).action)) { - items.add(LocaleController.getString("CallMessageReportProblem", R.string.CallMessageReportProblem)); - } - new AlertDialog.Builder(getParentActivity()) - .setTitle(LocaleController.getString("Calls", R.string.Calls)) - .setItems(items.toArray(new String[0]), (dialog, which) -> { - switch (which) { - case 0: - confirmAndDelete(row); - break; - case 1: - VoIPHelper.showRateAlert(getParentActivity(), (TLRPC.TL_messageActionPhoneCall) row.calls.get(0).action); - break; - } - }) - .show(); - return true; - }); - listView.setOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - int firstVisibleItem = layoutManager.findFirstVisibleItemPosition(); - int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1; - if (visibleItemCount > 0) { - int totalItemCount = listViewAdapter.getItemCount(); - if (!endReached && !loading && !calls.isEmpty() && firstVisibleItem + visibleItemCount >= totalItemCount - 5) { - final CallLogRow row = calls.get(calls.size() - 1); - AndroidUtilities.runOnUIThread(() -> getCalls(row.calls.get(row.calls.size() - 1).id, 100)); - } - } + listView.setOnItemClickListener((view, position) -> { + if (position < 0 || position >= calls.size()) { + return; + } + CallLogRow row = calls.get(position); + Bundle args = new Bundle(); + args.putInt("user_id", row.user.id); + args.putInt("message_id", row.calls.get(0).id); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats); + presentFragment(new ChatActivity(args), true); + }); + listView.setOnItemLongClickListener((view, position) -> { + if (position < 0 || position >= calls.size()) { + return false; + } + final CallLogRow row = calls.get(position); + ArrayList items = new ArrayList<>(); + items.add(LocaleController.getString("Delete", R.string.Delete)); + if (VoIPHelper.canRateCall((TLRPC.TL_messageActionPhoneCall) row.calls.get(0).action)) { + items.add(LocaleController.getString("CallMessageReportProblem", R.string.CallMessageReportProblem)); + } + new AlertDialog.Builder(getParentActivity()) + .setTitle(LocaleController.getString("Calls", R.string.Calls)) + .setItems(items.toArray(new String[0]), (dialog, which) -> { + switch (which) { + case 0: + confirmAndDelete(row); + break; + case 1: + VoIPHelper.showRateAlert(getParentActivity(), (TLRPC.TL_messageActionPhoneCall) row.calls.get(0).action); + break; + } + }) + .show(); + return true; + }); + listView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + int firstVisibleItem = layoutManager.findFirstVisibleItemPosition(); + int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1; + if (visibleItemCount > 0) { + int totalItemCount = listViewAdapter.getItemCount(); + if (!endReached && !loading && !calls.isEmpty() && firstVisibleItem + visibleItemCount >= totalItemCount - 5) { + final CallLogRow row = calls.get(calls.size() - 1); + AndroidUtilities.runOnUIThread(() -> getCalls(row.calls.get(row.calls.size() - 1).id, 100)); + } + } - if (floatingButton.getVisibility() != View.GONE) { - final View topChild = recyclerView.getChildAt(0); - int firstViewTop = 0; - if (topChild != null) { - firstViewTop = topChild.getTop(); - } - boolean goingDown; - boolean changed = true; - if (prevPosition == firstVisibleItem) { - final int topDelta = prevTop - firstViewTop; - goingDown = firstViewTop < prevTop; - changed = Math.abs(topDelta) > 1; - } else { - goingDown = firstVisibleItem > prevPosition; - } - if (changed && scrollUpdated) { - hideFloatingButton(goingDown); - } - prevPosition = firstVisibleItem; - prevTop = firstViewTop; - scrollUpdated = true; - } - } - }); + if (floatingButton.getVisibility() != View.GONE) { + final View topChild = recyclerView.getChildAt(0); + int firstViewTop = 0; + if (topChild != null) { + firstViewTop = topChild.getTop(); + } + boolean goingDown; + boolean changed = true; + if (prevPosition == firstVisibleItem) { + final int topDelta = prevTop - firstViewTop; + goingDown = firstViewTop < prevTop; + changed = Math.abs(topDelta) > 1; + } else { + goingDown = firstVisibleItem > prevPosition; + } + if (changed && scrollUpdated) { + hideFloatingButton(goingDown); + } + prevPosition = firstVisibleItem; + prevTop = firstViewTop; + scrollUpdated = true; + } + } + }); - if (loading) { - emptyView.showProgress(); - } else { - emptyView.showTextView(); - } + if (loading) { + emptyView.showProgress(); + } else { + emptyView.showTextView(); + } - floatingButton = new ImageView(context); - floatingButton.setVisibility(View.VISIBLE); - floatingButton.setScaleType(ImageView.ScaleType.CENTER); + floatingButton = new ImageView(context); + floatingButton.setVisibility(View.VISIBLE); + floatingButton.setScaleType(ImageView.ScaleType.CENTER); - Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground)); - if (Build.VERSION.SDK_INT < 21) { - Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate(); - shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.SRC_IN)); - CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0); - combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); - drawable = combinedDrawable; - } - floatingButton.setBackgroundDrawable(drawable); - floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.SRC_IN)); - floatingButton.setImageResource(R.drawable.ic_call); - floatingButton.setContentDescription(LocaleController.getString("Call", R.string.Call)); - if (Build.VERSION.SDK_INT >= 21) { - StateListAnimator animator = new StateListAnimator(); - animator.addState(new int[]{android.R.attr.state_pressed}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); - animator.addState(new int[]{}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); - floatingButton.setStateListAnimator(animator); - floatingButton.setOutlineProvider(new ViewOutlineProvider() { - @SuppressLint("NewApi") - @Override - public void getOutline(View view, Outline outline) { - outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); - } - }); - } - frameLayout.addView(floatingButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 14 : 0, 0, LocaleController.isRTL ? 0 : 14, 14)); - floatingButton.setOnClickListener(v -> { - Bundle args = new Bundle(); - args.putBoolean("destroyAfterSelect", true); - args.putBoolean("returnAsResult", true); - args.putBoolean("onlyUsers", true); - args.putBoolean("allowSelf", false); - ContactsActivity contactsFragment = new ContactsActivity(args); - contactsFragment.setDelegate((user, param, activity) -> VoIPHelper.startCall(user, getParentActivity(), null)); - presentFragment(contactsFragment); - }); + Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground)); + if (Build.VERSION.SDK_INT < 21) { + Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate(); + shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.SRC_IN)); + CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0); + combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + drawable = combinedDrawable; + } + floatingButton.setBackgroundDrawable(drawable); + floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.SRC_IN)); + floatingButton.setImageResource(R.drawable.ic_call); + floatingButton.setContentDescription(LocaleController.getString("Call", R.string.Call)); + if (Build.VERSION.SDK_INT >= 21) { + StateListAnimator animator = new StateListAnimator(); + animator.addState(new int[]{android.R.attr.state_pressed}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); + animator.addState(new int[]{}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); + floatingButton.setStateListAnimator(animator); + floatingButton.setOutlineProvider(new ViewOutlineProvider() { + @SuppressLint("NewApi") + @Override + public void getOutline(View view, Outline outline) { + outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + } + }); + } + frameLayout.addView(floatingButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 14 : 0, 0, LocaleController.isRTL ? 0 : 14, 14)); + floatingButton.setOnClickListener(v -> { + Bundle args = new Bundle(); + args.putBoolean("destroyAfterSelect", true); + args.putBoolean("returnAsResult", true); + args.putBoolean("onlyUsers", true); + args.putBoolean("allowSelf", false); + ContactsActivity contactsFragment = new ContactsActivity(args); + contactsFragment.setDelegate((user, param, activity) -> VoIPHelper.startCall(user, getParentActivity(), null)); + presentFragment(contactsFragment); + }); - return fragmentView; - } + return fragmentView; + } - private void hideFloatingButton(boolean hide) { - if (floatingHidden == hide) { - return; - } - floatingHidden = hide; - ObjectAnimator animator = ObjectAnimator.ofFloat(floatingButton, "translationY", floatingHidden ? AndroidUtilities.dp(100) : 0).setDuration(300); - animator.setInterpolator(floatingInterpolator); - floatingButton.setClickable(!hide); - animator.start(); - } + private void hideFloatingButton(boolean hide) { + if (floatingHidden == hide) { + return; + } + floatingHidden = hide; + ObjectAnimator animator = ObjectAnimator.ofFloat(floatingButton, "translationY", floatingHidden ? AndroidUtilities.dp(100) : 0).setDuration(300); + animator.setInterpolator(floatingInterpolator); + floatingButton.setClickable(!hide); + animator.start(); + } - private void getCalls(int max_id, final int count) { - if (loading) { - return; - } - loading = true; - if (emptyView != null && !firstLoaded) { - emptyView.showProgress(); - } - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); - req.limit = count; - req.peer = new TLRPC.TL_inputPeerEmpty(); - req.filter = new TLRPC.TL_inputMessagesFilterPhoneCalls(); - req.q = ""; - req.offset_id = max_id; - int reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { - if (error == null) { - SparseArray users = new SparseArray<>(); - TLRPC.messages_Messages msgs = (TLRPC.messages_Messages) response; - endReached = msgs.messages.isEmpty(); - for (int a = 0; a < msgs.users.size(); a++) { - TLRPC.User user = msgs.users.get(a); - users.put(user.id, user); - } - CallLogRow currentRow = calls.size() > 0 ? calls.get(calls.size() - 1) : null; - for (int a = 0; a < msgs.messages.size(); a++) { - TLRPC.Message msg = msgs.messages.get(a); - if (msg.action == null || msg.action instanceof TLRPC.TL_messageActionHistoryClear) { - continue; - } - int callType = msg.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? TYPE_OUT : TYPE_IN; - TLRPC.PhoneCallDiscardReason reason = msg.action.reason; - if (callType == TYPE_IN && (reason instanceof TLRPC.TL_phoneCallDiscardReasonMissed || reason instanceof TLRPC.TL_phoneCallDiscardReasonBusy)) { - callType = TYPE_MISSED; - } - int userID = msg.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? msg.to_id.user_id : msg.from_id; - if (currentRow == null || currentRow.user.id != userID || currentRow.type != callType) { - if (currentRow != null && !calls.contains(currentRow)) { - calls.add(currentRow); - } - CallLogRow row = new CallLogRow(); - row.calls = new ArrayList<>(); - row.user = users.get(userID); - row.type = callType; - currentRow = row; - } - currentRow.calls.add(msg); - } - if (currentRow != null && currentRow.calls.size() > 0 && !calls.contains(currentRow)) { - calls.add(currentRow); - } - } else { - endReached = true; - } - loading = false; - firstLoaded = true; - if (emptyView != null) { - emptyView.showTextView(); - } - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - }), ConnectionsManager.RequestFlagFailOnServerErrors); - ConnectionsManager.getInstance(currentAccount).bindRequestToGuid(reqId, classGuid); - } + private void getCalls(int max_id, final int count) { + if (loading) { + return; + } + loading = true; + if (emptyView != null && !firstLoaded) { + emptyView.showProgress(); + } + if (listViewAdapter != null) { + listViewAdapter.notifyDataSetChanged(); + } + TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); + req.limit = count; + req.peer = new TLRPC.TL_inputPeerEmpty(); + req.filter = new TLRPC.TL_inputMessagesFilterPhoneCalls(); + req.q = ""; + req.offset_id = max_id; + int reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (error == null) { + SparseArray users = new SparseArray<>(); + TLRPC.messages_Messages msgs = (TLRPC.messages_Messages) response; + endReached = msgs.messages.isEmpty(); + for (int a = 0; a < msgs.users.size(); a++) { + TLRPC.User user = msgs.users.get(a); + users.put(user.id, user); + } + CallLogRow currentRow = calls.size() > 0 ? calls.get(calls.size() - 1) : null; + for (int a = 0; a < msgs.messages.size(); a++) { + TLRPC.Message msg = msgs.messages.get(a); + if (msg.action == null || msg.action instanceof TLRPC.TL_messageActionHistoryClear) { + continue; + } + int callType = msg.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? TYPE_OUT : TYPE_IN; + TLRPC.PhoneCallDiscardReason reason = msg.action.reason; + if (callType == TYPE_IN && (reason instanceof TLRPC.TL_phoneCallDiscardReasonMissed || reason instanceof TLRPC.TL_phoneCallDiscardReasonBusy)) { + callType = TYPE_MISSED; + } + int userID = msg.from_id == UserConfig.getInstance(currentAccount).getClientUserId() ? msg.to_id.user_id : msg.from_id; + if (currentRow == null || currentRow.user.id != userID || currentRow.type != callType) { + if (currentRow != null && !calls.contains(currentRow)) { + calls.add(currentRow); + } + CallLogRow row = new CallLogRow(); + row.calls = new ArrayList<>(); + row.user = users.get(userID); + row.type = callType; + currentRow = row; + } + currentRow.calls.add(msg); + } + if (currentRow != null && currentRow.calls.size() > 0 && !calls.contains(currentRow)) { + calls.add(currentRow); + } + } else { + endReached = true; + } + loading = false; + firstLoaded = true; + if (emptyView != null) { + emptyView.showTextView(); + } + if (listViewAdapter != null) { + listViewAdapter.notifyDataSetChanged(); + } + }), ConnectionsManager.RequestFlagFailOnServerErrors); + ConnectionsManager.getInstance(currentAccount).bindRequestToGuid(reqId, classGuid); + } - private void confirmAndDelete(final CallLogRow row) { - if (getParentActivity() == null) - return; - new AlertDialog.Builder(getParentActivity()) - .setTitle(LocaleController.getString("NekoX", R.string.NekoX)) - .setMessage(LocaleController.getString("ConfirmDeleteCallLog", R.string.ConfirmDeleteCallLog)) - .setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialog, which) -> { - ArrayList ids = new ArrayList<>(); - for (TLRPC.Message msg : row.calls) { - ids.add(msg.id); - } - MessagesController.getInstance(currentAccount).deleteMessages(ids, null, null, 0, 0, false, false); - }) - .setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) - .show() - .setCanceledOnTouchOutside(true); - } + private void confirmAndDelete(final CallLogRow row) { + if (getParentActivity() == null) + return; + BottomBuilder builder = new BottomBuilder(getParentActivity()); - @Override - public void onResume() { - super.onResume(); - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - } + builder.addTitle(LocaleController.getString("ConfirmDeleteCallLog", R.string.ConfirmDeleteCallLog)); + builder.addItem(LocaleController.getString("Delete", R.string.Delete), R.drawable.baseline_delete_24, (dialog, which) -> { + ArrayList ids = new ArrayList<>(); + for (TLRPC.Message msg : row.calls) { + ids.add(msg.id); + } + MessagesController.getInstance(currentAccount).deleteMessages(ids, null, null, 0, 0, false, false); + return Unit.INSTANCE; + }); + builder.addCancelItem(); + builder.show(); + } - @Override - public void onRequestPermissionsResultFragment(int requestCode, String[] permissions, int[] grantResults) { - if (requestCode == 101) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - VoIPHelper.startCall(lastCallUser, getParentActivity(), null); - } else { - VoIPHelper.permissionDenied(getParentActivity(), null); - } - } - } + @Override + public void onResume() { + super.onResume(); + if (listViewAdapter != null) { + listViewAdapter.notifyDataSetChanged(); + } + } - private class ListAdapter extends RecyclerListView.SelectionAdapter { + @Override + public void onRequestPermissionsResultFragment(int requestCode, String[] permissions, int[] grantResults) { + if (requestCode == 101) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + VoIPHelper.startCall(lastCallUser, getParentActivity(), null); + } else { + VoIPHelper.permissionDenied(getParentActivity(), null); + } + } + } - private Context mContext; + private class ListAdapter extends RecyclerListView.SelectionAdapter { - public ListAdapter(Context context) { - mContext = context; - } + private Context mContext; - @Override - public boolean isEnabled(RecyclerView.ViewHolder holder) { - return holder.getAdapterPosition() != calls.size(); - } + public ListAdapter(Context context) { + mContext = context; + } - @Override - public int getItemCount() { - int count = calls.size(); - if (!calls.isEmpty()) { - if (!endReached) { - count++; - } - } - return count; - } + @Override + public boolean isEnabled(RecyclerView.ViewHolder holder) { + return holder.getAdapterPosition() != calls.size(); + } - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view; - switch (viewType) { - case 0: - CustomCell cell = new CustomCell(mContext); - view = cell; - view.setTag(new ViewItem(cell.imageView, cell.profileSearchCell)); - break; - case 1: - view = new LoadingCell(mContext); - break; - case 2: - default: - view = new TextInfoPrivacyCell(mContext); - view.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); - break; - } - return new RecyclerListView.Holder(view); - } + @Override + public int getItemCount() { + int count = calls.size(); + if (!calls.isEmpty()) { + if (!endReached) { + count++; + } + } + return count; + } - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder.getItemViewType() == 0) { - ViewItem viewItem = (ViewItem) holder.itemView.getTag(); - ProfileSearchCell cell = viewItem.cell; - CallLogRow row = calls.get(position); - TLRPC.Message last = row.calls.get(0); - SpannableString subtitle; - String ldir = LocaleController.isRTL ? "\u202b" : ""; - if (row.calls.size() == 1) { - subtitle = new SpannableString(ldir + " " + LocaleController.formatDateCallLog(last.date)); - } else { - subtitle = new SpannableString(String.format(ldir + " (%d) %s", row.calls.size(), LocaleController.formatDateCallLog(last.date))); - } - switch (row.type) { - case TYPE_OUT: - subtitle.setSpan(iconOut, ldir.length(), ldir.length() + 1, 0); - //cell.setContentDescription(LocaleController.getString("CallMessageOutgoing", R.string.CallMessageOutgoing)); - break; - case TYPE_IN: - subtitle.setSpan(iconIn, ldir.length(), ldir.length() + 1, 0); - //cell.setContentDescription(LocaleController.getString("CallMessageIncoming", R.string.CallMessageIncoming)); - break; - case TYPE_MISSED: - subtitle.setSpan(iconMissed, ldir.length(), ldir.length() + 1, 0); - //cell.setContentDescription(LocaleController.getString("CallMessageIncomingMissed", R.string.CallMessageIncomingMissed)); - break; - } - cell.setData(row.user, null, null, subtitle, false, false); - cell.useSeparator = position != calls.size() - 1 || !endReached; - viewItem.button.setTag(row); - } - } + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case 0: + CustomCell cell = new CustomCell(mContext); + view = cell; + view.setTag(new ViewItem(cell.imageView, cell.profileSearchCell)); + break; + case 1: + view = new LoadingCell(mContext); + break; + case 2: + default: + view = new TextInfoPrivacyCell(mContext); + view.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + break; + } + return new RecyclerListView.Holder(view); + } - @Override - public int getItemViewType(int i) { - if (i < calls.size()) { - return 0; - } else if (!endReached && i == calls.size()) { - return 1; - } - return 2; - } - } + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder.getItemViewType() == 0) { + ViewItem viewItem = (ViewItem) holder.itemView.getTag(); + ProfileSearchCell cell = viewItem.cell; + CallLogRow row = calls.get(position); + TLRPC.Message last = row.calls.get(0); + SpannableString subtitle; + String ldir = LocaleController.isRTL ? "\u202b" : ""; + if (row.calls.size() == 1) { + subtitle = new SpannableString(ldir + " " + LocaleController.formatDateCallLog(last.date)); + } else { + subtitle = new SpannableString(String.format(ldir + " (%d) %s", row.calls.size(), LocaleController.formatDateCallLog(last.date))); + } + switch (row.type) { + case TYPE_OUT: + subtitle.setSpan(iconOut, ldir.length(), ldir.length() + 1, 0); + //cell.setContentDescription(LocaleController.getString("CallMessageOutgoing", R.string.CallMessageOutgoing)); + break; + case TYPE_IN: + subtitle.setSpan(iconIn, ldir.length(), ldir.length() + 1, 0); + //cell.setContentDescription(LocaleController.getString("CallMessageIncoming", R.string.CallMessageIncoming)); + break; + case TYPE_MISSED: + subtitle.setSpan(iconMissed, ldir.length(), ldir.length() + 1, 0); + //cell.setContentDescription(LocaleController.getString("CallMessageIncomingMissed", R.string.CallMessageIncomingMissed)); + break; + } + cell.setData(row.user, null, null, subtitle, false, false); + cell.useSeparator = position != calls.size() - 1 || !endReached; + viewItem.button.setTag(row); + } + } - private static class ViewItem { - public ProfileSearchCell cell; - public ImageView button; + @Override + public int getItemViewType(int i) { + if (i < calls.size()) { + return 0; + } else if (!endReached && i == calls.size()) { + return 1; + } + return 2; + } + } - public ViewItem(ImageView button, ProfileSearchCell cell) { - this.button = button; - this.cell = cell; - } - } + private static class ViewItem { + public ProfileSearchCell cell; + public ImageView button; - private static class CallLogRow { - public TLRPC.User user; - public List calls; - public int type; - } + public ViewItem(ImageView button, ProfileSearchCell cell) { + this.button = button; + this.cell = cell; + } + } - @Override - public ArrayList getThemeDescriptions() { + private static class CallLogRow { + public TLRPC.User user; + public List calls; + public int type; + } + + @Override + public ArrayList getThemeDescriptions() { ArrayList themeDescriptions = new ArrayList<>(); ThemeDescription.ThemeDescriptionDelegate cellDelegate = () -> { - if (listView != null) { - int count = listView.getChildCount(); - for (int a = 0; a < count; a++) { - View child = listView.getChildAt(a); - if (child instanceof CustomCell) { - CustomCell cell = (CustomCell) child; - cell.profileSearchCell.update(0); - } - } - } - }; + if (listView != null) { + int count = listView.getChildCount(); + for (int a = 0; a < count; a++) { + View child = listView.getChildAt(a); + if (child instanceof CustomCell) { + CustomCell cell = (CustomCell) child; + cell.profileSearchCell.update(0); + } + } + } + }; - themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{LocationCell.class, CustomCell.class}, null, null, null, Theme.key_windowBackgroundWhite)); - themeDescriptions.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundGray)); + themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{LocationCell.class, CustomCell.class}, null, null, null, Theme.key_windowBackgroundWhite)); + themeDescriptions.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundGray)); - themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault)); - themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_LISTGLOWCOLOR, null, null, null, null, Theme.key_actionBarDefault)); - themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_actionBarDefaultIcon)); - themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_actionBarDefaultTitle)); - themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_actionBarDefaultSelector)); + themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault)); + themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_LISTGLOWCOLOR, null, null, null, null, Theme.key_actionBarDefault)); + themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_actionBarDefaultIcon)); + themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_actionBarDefaultTitle)); + themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_actionBarDefaultSelector)); - themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); + themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, Theme.dividerPaint, null, null, Theme.key_divider)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, Theme.dividerPaint, null, null, Theme.key_divider)); - themeDescriptions.add(new ThemeDescription(emptyView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_emptyListPlaceholder)); - themeDescriptions.add(new ThemeDescription(emptyView, ThemeDescription.FLAG_PROGRESSBAR, null, null, null, null, Theme.key_progressCircle)); + themeDescriptions.add(new ThemeDescription(emptyView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_emptyListPlaceholder)); + themeDescriptions.add(new ThemeDescription(emptyView, ThemeDescription.FLAG_PROGRESSBAR, null, null, null, null, Theme.key_progressCircle)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{LoadingCell.class}, new String[]{"progressBar"}, null, null, null, Theme.key_progressCircle)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{LoadingCell.class}, new String[]{"progressBar"}, null, null, null, Theme.key_progressCircle)); - themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{TextInfoPrivacyCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{TextInfoPrivacyCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayText4)); + themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{TextInfoPrivacyCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{TextInfoPrivacyCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayText4)); - themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionIcon)); - themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_chats_actionBackground)); - themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_BACKGROUNDFILTER | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, null, null, null, null, Theme.key_chats_actionPressedBackground)); + themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_IMAGECOLOR, null, null, null, null, Theme.key_chats_actionIcon)); + themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_chats_actionBackground)); + themeDescriptions.add(new ThemeDescription(floatingButton, ThemeDescription.FLAG_BACKGROUNDFILTER | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, null, null, null, null, Theme.key_chats_actionPressedBackground)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_featuredStickers_addButton)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Drawable[]{Theme.dialogs_verifiedCheckDrawable}, null, Theme.key_chats_verifiedCheck)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Drawable[]{Theme.dialogs_verifiedDrawable}, null, Theme.key_chats_verifiedBackground)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, Theme.dialogs_offlinePaint, null, null, Theme.key_windowBackgroundWhiteGrayText3)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, Theme.dialogs_onlinePaint, null, null, Theme.key_windowBackgroundWhiteBlueText3)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Paint[]{Theme.dialogs_namePaint[0], Theme.dialogs_namePaint[1], Theme.dialogs_searchNamePaint}, null, null, Theme.key_chats_name)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Paint[]{Theme.dialogs_nameEncryptedPaint[0], Theme.dialogs_nameEncryptedPaint[1], Theme.dialogs_searchNameEncryptedPaint}, null, null, Theme.key_chats_secretName)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, Theme.avatarDrawables, null, Theme.key_avatar_text)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundRed)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundOrange)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundViolet)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundGreen)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundCyan)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundBlue)); - themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundPink)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_featuredStickers_addButton)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Drawable[]{Theme.dialogs_verifiedCheckDrawable}, null, Theme.key_chats_verifiedCheck)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Drawable[]{Theme.dialogs_verifiedDrawable}, null, Theme.key_chats_verifiedBackground)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, Theme.dialogs_offlinePaint, null, null, Theme.key_windowBackgroundWhiteGrayText3)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, Theme.dialogs_onlinePaint, null, null, Theme.key_windowBackgroundWhiteBlueText3)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Paint[]{Theme.dialogs_namePaint[0], Theme.dialogs_namePaint[1], Theme.dialogs_searchNamePaint}, null, null, Theme.key_chats_name)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, new Paint[]{Theme.dialogs_nameEncryptedPaint[0], Theme.dialogs_nameEncryptedPaint[1], Theme.dialogs_searchNameEncryptedPaint}, null, null, Theme.key_chats_secretName)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{CustomCell.class}, null, Theme.avatarDrawables, null, Theme.key_avatar_text)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundRed)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundOrange)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundViolet)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundGreen)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundCyan)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundBlue)); + themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundPink)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, null, new Drawable[]{greenDrawable, greenDrawable2, Theme.calllog_msgCallUpRedDrawable, Theme.calllog_msgCallDownRedDrawable}, null, Theme.key_calls_callReceivedGreenIcon)); - themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, null, new Drawable[]{redDrawable, Theme.calllog_msgCallUpGreenDrawable, Theme.calllog_msgCallDownGreenDrawable}, null, Theme.key_calls_callReceivedRedIcon)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, null, new Drawable[]{greenDrawable, greenDrawable2, Theme.calllog_msgCallUpRedDrawable, Theme.calllog_msgCallDownRedDrawable}, null, Theme.key_calls_callReceivedGreenIcon)); + themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, null, new Drawable[]{redDrawable, Theme.calllog_msgCallUpGreenDrawable, Theme.calllog_msgCallDownGreenDrawable}, null, Theme.key_calls_callReceivedRedIcon)); - return themeDescriptions; - } + return themeDescriptions; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java index 22840ad28..c85882d97 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java @@ -43,6 +43,12 @@ public class HeaderCell extends LinearLayout { } public HeaderCell(Context context, String textColorKey, int padding, int topMargin, boolean text2) { + + this(context, textColorKey, padding, topMargin, text2, false); + + } + + public HeaderCell(Context context, String textColorKey, int padding, int topMargin, boolean text2,boolean bigTitle) { super(context); setOrientation(LinearLayout.VERTICAL); @@ -50,7 +56,9 @@ public class HeaderCell extends LinearLayout { textView = new TextView(getContext()); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); - textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + if (bigTitle) { + textView.setTypeface(AndroidUtilities.getTypeface("fonts/mw_bold.ttf")); + } textView.setEllipsize(TextUtils.TruncateAt.END); textView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); textView.setMinHeight(AndroidUtilities.dp(height - topMargin)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 77d3780dc..676cae493 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -118,6 +118,7 @@ import java.util.HashMap; import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.NekoXConfig; +import tw.nekomimi.nekogram.utils.AlertUtil; public class ChannelAdminLogActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { @@ -1323,11 +1324,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio selectedObject = null; return; } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); - builder.setMessage(LocaleController.getString("IncorrectTheme", R.string.IncorrectTheme)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - showDialog(builder.create()); + AlertUtil.showToast(LocaleController.getString("IncorrectTheme", R.string.IncorrectTheme)); } } else { if (LocaleController.getInstance().applyLanguageFile(locFile, currentAccount)) { @@ -1337,11 +1334,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio selectedObject = null; return; } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); - builder.setMessage(LocaleController.getString("IncorrectLocalization", R.string.IncorrectLocalization)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - showDialog(builder.create()); + AlertUtil.showToast(LocaleController.getString("IncorrectLocalization", R.string.IncorrectLocalization)); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java index 41ea0a764..30312e6f8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java @@ -36,6 +36,7 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; +import org.checkerframework.common.subtyping.qual.Bottom; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ChatObject; @@ -72,6 +73,9 @@ import org.telegram.ui.Components.SizeNotifierFrameLayout; import java.util.ArrayList; +import kotlin.Unit; +import tw.nekomimi.nekogram.BottomBuilder; + public class ChannelCreateActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ImageUpdater.ImageUpdaterDelegate { private View doneButton; @@ -953,15 +957,13 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC AdminedChannelCell adminedChannelCell = new AdminedChannelCell(getParentActivity(), view -> { AdminedChannelCell cell = (AdminedChannelCell) view.getParent(); final TLRPC.Chat channel = cell.getCurrentChannel(); - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("NekoX", R.string.NekoX)); + BottomBuilder builder = new BottomBuilder(getParentActivity()); if (channel.megagroup) { - builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("RevokeLinkAlert", R.string.RevokeLinkAlert, MessagesController.getInstance(currentAccount).linkPrefix + "/" + channel.username, channel.title))); + builder.addTitle(AndroidUtilities.replaceTags(LocaleController.formatString("RevokeLinkAlert", R.string.RevokeLinkAlert, MessagesController.getInstance(currentAccount).linkPrefix + "/" + channel.username, channel.title))); } else { - builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("RevokeLinkAlertChannel", R.string.RevokeLinkAlertChannel, MessagesController.getInstance(currentAccount).linkPrefix + "/" + channel.username, channel.title))); + builder.addTitle(AndroidUtilities.replaceTags(LocaleController.formatString("RevokeLinkAlertChannel", R.string.RevokeLinkAlertChannel, MessagesController.getInstance(currentAccount).linkPrefix + "/" + channel.username, channel.title))); } - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - builder.setPositiveButton(LocaleController.getString("RevokeButton", R.string.RevokeButton), (dialogInterface, i) -> { + builder.addItem(LocaleController.getString("RevokeButton", R.string.RevokeButton),R.drawable.baseline_delete_forever_24, (i) -> { TLRPC.TL_channels_updateUsername req1 = new TLRPC.TL_channels_updateUsername(); req1.channel = MessagesController.getInputChannel(channel); req1.username = ""; @@ -976,7 +978,9 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC }); } }, ConnectionsManager.RequestFlagInvokeAfter); + return Unit.INSTANCE; }); + builder.addCancelItem(); showDialog(builder.create()); }); adminedChannelCell.setChannel(res.chats.get(a), a == res.chats.size() - 1); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/BottomBuilder.kt b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/BottomBuilder.kt index 7ef5fbad1..3a15ce928 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/BottomBuilder.kt +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/BottomBuilder.kt @@ -66,7 +66,7 @@ class BottomBuilder(val ctx: Context) { } @JvmOverloads - fun addTitle(title: CharSequence, bigTitle: Boolean = true): HeaderCell { + fun addTitle(title: CharSequence, bigTitle: Boolean = false): HeaderCell { return addTitle(title, bigTitle, null) @@ -80,7 +80,7 @@ class BottomBuilder(val ctx: Context) { fun addTitle(title: CharSequence, bigTitle: Boolean, subTitle: CharSequence?): HeaderCell { - val headerCell = if (bigTitle) HeaderCell(ctx, Theme.key_dialogTextBlue2, 21, 15, subTitle != null) else HeaderCell(ctx) + val headerCell = HeaderCell(ctx) headerCell.setText(if (title is String) AndroidUtilities.replaceTags(title) else title) diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/AlertUtil.kt b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/AlertUtil.kt index 70b51e209..0607527e4 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/AlertUtil.kt +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/AlertUtil.kt @@ -7,6 +7,7 @@ import org.telegram.messenger.AndroidUtilities import org.telegram.messenger.ApplicationLoader import org.telegram.messenger.LocaleController import org.telegram.messenger.R +import org.telegram.tgnet.TLRPC import org.telegram.ui.ActionBar.AlertDialog import org.telegram.ui.Components.EditTextBoldCursor import org.telegram.ui.Components.NumberPicker @@ -20,6 +21,9 @@ object AlertUtil { @JvmStatic fun showToast(e: Throwable) = showToast(e.message ?: e.javaClass.simpleName) + @JvmStatic + fun showToast(e: TLRPC.TL_error) = showToast("${e.code}: ${e.text}") + @JvmStatic fun showToast(text: String) = UIUtil.runOnUIThread(Runnable { Toast.makeText(