diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 91e36fc06cc4..66c2abc7ef61 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,8 +2,8 @@ diff --git a/app/src/main/java/at/tomtasche/reader/ui/activity/DocumentFragment.java b/app/src/main/java/at/tomtasche/reader/ui/activity/DocumentFragment.java index a09acd3b16fa..9a8e423c82bf 100644 --- a/app/src/main/java/at/tomtasche/reader/ui/activity/DocumentFragment.java +++ b/app/src/main/java/at/tomtasche/reader/ui/activity/DocumentFragment.java @@ -31,6 +31,7 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.view.MenuProvider; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import at.tomtasche.reader.R; @@ -46,7 +47,7 @@ import at.tomtasche.reader.ui.widget.PageView; import at.tomtasche.reader.ui.widget.ProgressDialogFragment; -public class DocumentFragment extends Fragment implements LoaderService.LoaderListener, ActionBar.TabListener { +public class DocumentFragment extends Fragment implements LoaderService.LoaderListener, ActionBar.TabListener, MenuProvider { private static final String SAVED_KEY_LAST_RESULT = "LAST_RESULT"; private static final String SAVED_KEY_CURRENT_HTML_DIFF = "CURRENT_HTML_DIFF"; @@ -80,6 +81,8 @@ public class DocumentFragment extends Fragment implements LoaderService.LoaderLi public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { this.container = container; + getActivity().addMenuProvider(this, getActivity()); + return super.onCreateView(inflater, container, savedInstanceState); } @@ -114,8 +117,6 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { mainHandler = new Handler(); - setHasOptionsMenu(true); - MainActivity mainActivity = (MainActivity) getActivity(); analyticsManager = mainActivity.getAnalyticsManager(); configManager = mainActivity.getConfigManager(); @@ -154,9 +155,7 @@ public void onService(LoaderService service) { } @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { this.menu = menu; menu.findItem(R.id.menu_fullscreen).setVisible(true); @@ -164,7 +163,17 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.findItem(R.id.menu_share).setVisible(true); menu.findItem(R.id.menu_save).setVisible(true); menu.findItem(R.id.menu_print).setVisible(true); - // the other menu items are dynamically enabled on document load + + // the other menu items are dynamically enabled based on the loaded document + if (lastResult != null) { + prepareMenu(lastResult.loaderType); + } + } + + @Override + public boolean onMenuItemSelected(@NonNull MenuItem menuItem) { + // TODO: handle menu item clicks here. currently done in Activity for historical reasons + return false; } @Override @@ -378,12 +387,9 @@ public void onLoadSuccess(FileLoader.Result result) { return; } - Activity activity = getActivity(); FileLoader.Options options = result.options; - prepareMenu(result.loaderType); - analyticsManager.setCurrentScreen(activity, result.loaderType.toString() + "_" + options.fileType); resetTabs(); diff --git a/app/src/main/java/at/tomtasche/reader/ui/activity/MainActivity.java b/app/src/main/java/at/tomtasche/reader/ui/activity/MainActivity.java index 983a7d0aa57d..441dedfcd8c1 100644 --- a/app/src/main/java/at/tomtasche/reader/ui/activity/MainActivity.java +++ b/app/src/main/java/at/tomtasche/reader/ui/activity/MainActivity.java @@ -21,6 +21,7 @@ import android.view.ActionMode; import android.view.KeyEvent; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; @@ -33,6 +34,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SwitchCompat; +import androidx.core.view.MenuProvider; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentTransaction; import androidx.test.espresso.IdlingResource; @@ -60,7 +62,7 @@ import at.tomtasche.reader.ui.TtsActionModeCallback; import at.tomtasche.reader.ui.widget.RecentDocumentDialogFragment; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements MenuProvider { // taken from: https://stackoverflow.com/a/36829889/198996 private static boolean isTesting() { @@ -190,6 +192,8 @@ public void onClick(View view) { analyticsManager.setCurrentScreen(this, "screen_main"); } + + addMenuProvider(this, this); } @Override @@ -324,16 +328,12 @@ protected void onNewIntent(Intent intent) { } @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - - getMenuInflater().inflate(R.menu.menu_main, menu); + public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + menuInflater.inflate(R.menu.menu_main, menu); if (billingManager.hasPurchased()) { menu.findItem(R.id.menu_remove_ads).setVisible(false); } - - return true; } @Override @@ -397,7 +397,7 @@ public void loadUri(Uri uri) { } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onMenuItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.menu_search) { FindActionModeCallback findActionModeCallback = new FindActionModeCallback(this);