package com.moez.QKSMS.common; import android.util.Log; import com.android.volley.toolbox.StringRequest; import com.google.gson.Gson; import com.moez.QKSMS.BuildConfig; import com.moez.QKSMS.R; import com.moez.QKSMS.data.Conversation; import com.moez.QKSMS.model.ChangeModel; import com.moez.QKSMS.transaction.SmsHelper; import com.moez.QKSMS.ui.MainActivity; import com.moez.QKSMS.ui.base.QKActivity; import com.moez.QKSMS.ui.dialog.DefaultSmsHelper; import com.moez.QKSMS.ui.dialog.QKDialog; import com.moez.QKSMS.ui.messagelist.MessageListActivity; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.Set; public class DialogHelper { private static final String TAG = "DialogHelper"; public static void showDeleteConversationDialog(QKActivity context, long threadId) { Set<Long> threadIds = new HashSet<>(); threadIds.add(threadId); showDeleteConversationsDialog(context, threadIds); } public static void showDeleteConversationsDialog(final QKActivity context, final Set<Long> threadIds) { new DefaultSmsHelper(context, R.string.not_default_delete).showIfNotDefault(null); Set<Long> threads = new HashSet<>(threadIds); // Make a copy so the list isn't reset when multi-select is disabled new QKDialog() .setContext(context) .setTitle(R.string.delete_conversation) .setMessage(context.getString(R.string.delete_confirmation, threads.size())) .setPositiveButton(R.string.yes, v -> { Log.d(TAG, "Deleting threads: " + Arrays.toString(threads.toArray())); Conversation.ConversationQueryHandler handler = new Conversation.ConversationQueryHandler(context.getContentResolver(), context); Conversation.startDelete(handler, 0, false, threads); Conversation.asyncDeleteObsoleteThreads(handler, 0); if (context instanceof MessageListActivity) { context.onBackPressed(); } }) .setNegativeButton(R.string.cancel, null) .show(); } public static void showDeleteFailedMessagesDialog(final MainActivity context, final Set<Long> threadIds) { new DefaultSmsHelper(context, R.string.not_default_delete).showIfNotDefault(null); Set<Long> threads = new HashSet<>(threadIds); // Make a copy so the list isn't reset when multi-select is disabled new QKDialog() .setContext(context) .setTitle(R.string.delete_all_failed) .setMessage(context.getString(R.string.delete_all_failed_confirmation, threads.size())) .setPositiveButton(R.string.yes, v -> { new Thread(() -> { for (long threadId : threads) { SmsHelper.deleteFailedMessages(context, threadId); } }).start(); }) .setNegativeButton(R.string.cancel, null) .show(); } public static void showChangelog(QKActivity context) { context.showProgressDialog(); String url = "https://qksms-changelog.firebaseio.com/changes.json"; StringRequest request = new StringRequest(url, response -> { Gson gson = new Gson(); ChangeModel[] changes = gson.fromJson(response, ChangeModel[].class); // Fill in the localized date strings, and the `Long` time so that we can sort them SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dateRevisionParser = new SimpleDateFormat("yyyy-MM-dd-'r'H"); // For multiple updates in a day SimpleDateFormat dateFormatter = new SimpleDateFormat("MMMM d, yyyy"); for (ChangeModel change : changes) { try { Date date; if (change.getDate().length() > 11) { date = dateRevisionParser.parse(change.getDate()); } else { date = dateParser.parse(change.getDate()); } change.setDate(dateFormatter.format(date)); change.setDateLong(date.getTime()); } catch (ParseException e) { e.printStackTrace(); } } Arrays.sort(changes, (lhs, rhs) -> Long.valueOf(rhs.getDateLong()).compareTo(lhs.getDateLong())); // Only show changelogs for current and past versions boolean currentVersionReached = false; ArrayList<String> versions = new ArrayList<>(); ArrayList<String> dates = new ArrayList<>(); ArrayList<String> changelists = new ArrayList<>(); for (ChangeModel change : changes) { if (change.getVersion().equals(BuildConfig.VERSION_NAME)) { currentVersionReached = true; } if (currentVersionReached) { versions.add(change.getVersion()); dates.add(change.getDate()); String changelist = ""; for (int i = 0; i < change.getChanges().size(); i++) { String changeItem = change.getChanges().get(i); changelist += " • "; changelist += changeItem; if (i < change.getChanges().size() - 1) { changelist += "\n"; } } changelists.add(changelist); } } context.hideProgressDialog(); new QKDialog() .setContext(context) .setTitle(R.string.title_changelog) .setTripleLineItems( versions.toArray(new String[versions.size()]), dates.toArray(new String[versions.size()]), changelists.toArray(new String[versions.size()]), null) .show(); }, error -> { context.hideProgressDialog(); context.makeToast(R.string.toast_changelog_error); }); context.getRequestQueue().add(request); } }