From fb5752f7085d864a71da4eab7077e512d300b37d Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 1 Mar 2019 09:07:15 +0000 Subject: [PATCH] Prevent crash --- .../java/eu/faircode/email/ActivitySetup.java | 37 ++++++++++------ .../java/eu/faircode/email/ActivityView.java | 42 +++++++++++-------- .../java/eu/faircode/email/DrawerAdapter.java | 25 +++++++++++ 3 files changed, 74 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index d9822d2074..81f6778f0f 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -57,6 +57,7 @@ import java.io.OutputStream; import java.security.SecureRandom; import java.security.spec.KeySpec; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @@ -138,6 +139,9 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On @Override public void onItemClick(AdapterView parent, View view, int position, long id) { DrawerItem item = drawerArray.getItem(position); + if (item == null) + return; + switch (item.getMenuId()) { case R.string.title_setup_export: onMenuExport(); @@ -179,6 +183,9 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { DrawerItem item = drawerArray.getItem(position); + if (item == null) + return false; + if (item.getMenuId() == R.string.menu_privacy) { new SimpleTask() { @Override @@ -200,36 +207,40 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On } }); + List items = new ArrayList<>(); + PackageManager pm = getPackageManager(); if (getIntentExport().resolveActivity(pm) != null) - drawerArray.add(new DrawerItem(-1, R.string.title_setup_export, R.drawable.baseline_archive_24)); + items.add(new DrawerItem(-1, R.string.title_setup_export, R.drawable.baseline_archive_24)); if (getIntentImport().resolveActivity(pm) != null) - drawerArray.add(new DrawerItem(-2, R.string.title_setup_import, R.drawable.baseline_unarchive_24)); + items.add(new DrawerItem(-2, R.string.title_setup_import, R.drawable.baseline_unarchive_24)); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String theme = prefs.getString("theme", "system"); if ("light".equals(theme)) - drawerArray.add(new DrawerItem(-3, R.string.title_setup_dark_theme, R.drawable.baseline_palette_24)); + items.add(new DrawerItem(-3, R.string.title_setup_dark_theme, R.drawable.baseline_palette_24)); else if ("dark".equals(theme)) - drawerArray.add(new DrawerItem(-4, R.string.title_setup_black_theme, R.drawable.baseline_palette_24)); + items.add(new DrawerItem(-4, R.string.title_setup_black_theme, R.drawable.baseline_palette_24)); else if ("black".equals(theme)) - drawerArray.add(new DrawerItem(-5, R.string.title_setup_system_theme, R.drawable.baseline_palette_24)); + items.add(new DrawerItem(-5, R.string.title_setup_system_theme, R.drawable.baseline_palette_24)); else - drawerArray.add(new DrawerItem(-6, R.string.title_setup_light_theme, R.drawable.baseline_palette_24)); + items.add(new DrawerItem(-6, R.string.title_setup_light_theme, R.drawable.baseline_palette_24)); if (getIntentNotifications(this).resolveActivity(pm) != null) - drawerArray.add(new DrawerItem(-7, R.string.title_setup_notifications, R.drawable.baseline_notifications_24)); + items.add(new DrawerItem(-7, R.string.title_setup_notifications, R.drawable.baseline_notifications_24)); - drawerArray.add(new DrawerItem(-8, R.string.title_setup_advanced, R.drawable.baseline_settings_applications_24)); + items.add(new DrawerItem(-8, R.string.title_setup_advanced, R.drawable.baseline_settings_applications_24)); - drawerArray.add(new DrawerItem(-9)); + items.add(new DrawerItem(-9)); - drawerArray.add(new DrawerItem(-10, R.string.menu_legend, R.drawable.baseline_help_24)); + items.add(new DrawerItem(-10, R.string.menu_legend, R.drawable.baseline_help_24)); if (Helper.getIntentFAQ().resolveActivity(getPackageManager()) != null) - drawerArray.add(new DrawerItem(-11, R.string.menu_faq, R.drawable.baseline_question_answer_24)); + items.add(new DrawerItem(-11, R.string.menu_faq, R.drawable.baseline_question_answer_24)); if (Helper.getIntentPrivacy().resolveActivity(getPackageManager()) != null) - drawerArray.add(new DrawerItem(-12, R.string.menu_privacy, R.drawable.baseline_account_box_24)); - drawerArray.add(new DrawerItem(-13, R.string.menu_about, R.drawable.baseline_info_24)); + items.add(new DrawerItem(-12, R.string.menu_privacy, R.drawable.baseline_account_box_24)); + items.add(new DrawerItem(-13, R.string.menu_about, R.drawable.baseline_info_24)); + + drawerArray.set(items); getSupportFragmentManager().addOnBackStackChangedListener(this); diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 3efe9af922..fa06778dcb 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -178,6 +178,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override public void onItemClick(AdapterView parent, View view, int position, long id) { DrawerItem item = drawerArray.getItem(position); + if (item == null) + return; + switch (item.getMenuId()) { case R.string.menu_answers: onMenuAnswers(); @@ -229,6 +232,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { DrawerItem item = drawerArray.getItem(position); + if (item == null) + return false; + switch (item.getMenuId()) { case R.string.menu_operations: onShowLog(); @@ -303,33 +309,33 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB return; last = accounts; - drawerArray.clear(); + List items = new ArrayList<>(); for (TupleAccountEx account : accounts) - drawerArray.add(new DrawerItem( + items.add(new DrawerItem( account.id, "connected".equals(account.state) ? R.drawable.baseline_folder_24 : R.drawable.baseline_folder_open_24, account.color, account.unseen > 0 ? getString(R.string.title_unseen_count, account.name, account.unseen) : account.toString(), account.unseen > 0)); - drawerArray.add(new DrawerItem(-1)); - drawerArray.add(new DrawerItem(-2, R.string.menu_answers, R.drawable.baseline_reply_24)); - drawerArray.add(new DrawerItem(-3, R.string.menu_operations, R.drawable.baseline_list_24)); - drawerArray.add(new DrawerItem(-4, R.string.menu_setup, R.drawable.baseline_settings_applications_24)); - drawerArray.add(new DrawerItem(-5)); - drawerArray.add(new DrawerItem(-6, R.string.menu_legend, R.drawable.baseline_help_24)); + items.add(new DrawerItem(-1)); + items.add(new DrawerItem(-2, R.string.menu_answers, R.drawable.baseline_reply_24)); + items.add(new DrawerItem(-3, R.string.menu_operations, R.drawable.baseline_list_24)); + items.add(new DrawerItem(-4, R.string.menu_setup, R.drawable.baseline_settings_applications_24)); + items.add(new DrawerItem(-5)); + items.add(new DrawerItem(-6, R.string.menu_legend, R.drawable.baseline_help_24)); if (Helper.getIntentFAQ().resolveActivity(getPackageManager()) != null) - drawerArray.add(new DrawerItem(-7, R.string.menu_faq, R.drawable.baseline_question_answer_24)); + items.add(new DrawerItem(-7, R.string.menu_faq, R.drawable.baseline_question_answer_24)); if (BuildConfig.BETA_RELEASE) - drawerArray.add(new DrawerItem(-8, R.string.menu_issue, R.drawable.baseline_report_problem_24)); + items.add(new DrawerItem(-8, R.string.menu_issue, R.drawable.baseline_report_problem_24)); if (Helper.getIntentPrivacy().resolveActivity(getPackageManager()) != null) - drawerArray.add(new DrawerItem(-9, R.string.menu_privacy, R.drawable.baseline_account_box_24)); + items.add(new DrawerItem(-9, R.string.menu_privacy, R.drawable.baseline_account_box_24)); - drawerArray.add(new DrawerItem(-10, R.string.menu_about, R.drawable.baseline_info_24)); + items.add(new DrawerItem(-10, R.string.menu_about, R.drawable.baseline_info_24)); boolean pro = (getIntentPro() == null || getIntentPro().resolveActivity(getPackageManager()) != null); boolean invite = (getIntentInvite().resolveActivity(getPackageManager()) != null); @@ -337,19 +343,21 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB boolean other = (getIntentOtherApps().resolveActivity(getPackageManager()) != null); if (pro || invite || rate || other) - drawerArray.add(new DrawerItem(-11)); + items.add(new DrawerItem(-11)); if (pro) - drawerArray.add(new DrawerItem(-12, R.string.menu_pro, R.drawable.baseline_monetization_on_24)); + items.add(new DrawerItem(-12, R.string.menu_pro, R.drawable.baseline_monetization_on_24)); if (invite) - drawerArray.add(new DrawerItem(-13, R.string.menu_invite, R.drawable.baseline_people_24)); + items.add(new DrawerItem(-13, R.string.menu_invite, R.drawable.baseline_people_24)); if (rate) - drawerArray.add(new DrawerItem(-14, R.string.menu_rate, R.drawable.baseline_star_24)); + items.add(new DrawerItem(-14, R.string.menu_rate, R.drawable.baseline_star_24)); if (other) - drawerArray.add(new DrawerItem(-15, R.string.menu_other, R.drawable.baseline_get_app_24)); + items.add(new DrawerItem(-15, R.string.menu_other, R.drawable.baseline_get_app_24)); + + drawerArray.set(items); } }); diff --git a/app/src/main/java/eu/faircode/email/DrawerAdapter.java b/app/src/main/java/eu/faircode/email/DrawerAdapter.java index c0b319ebca..e266f64446 100644 --- a/app/src/main/java/eu/faircode/email/DrawerAdapter.java +++ b/app/src/main/java/eu/faircode/email/DrawerAdapter.java @@ -8,9 +8,15 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; +import java.util.ArrayList; +import java.util.List; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; public class DrawerAdapter extends ArrayAdapter { + private List items = new ArrayList<>(); + DrawerAdapter(@NonNull Context context) { super(context, -1); } @@ -39,6 +45,25 @@ public class DrawerAdapter extends ArrayAdapter { return row; } + void set(List items) { + this.items = items; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Nullable + @Override + public DrawerItem getItem(int position) { + if (position < items.size()) + return items.get(position); + else + return null; + } + @Override public boolean hasStableIds() { return true;