diff --git a/app/src/main/java/de/robv/android/xposed/installer/DownloadFragment.java b/app/src/main/java/de/robv/android/xposed/installer/DownloadFragment.java index f9806590b..ba2b61a0f 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/DownloadFragment.java +++ b/app/src/main/java/de/robv/android/xposed/installer/DownloadFragment.java @@ -137,6 +137,12 @@ public boolean onKey(View v, int keyCode, KeyEvent event) { return v; } + @Override + public void onResume() { + super.onResume(); + getActivity().setTitle(R.string.nav_item_download); + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/app/src/main/java/de/robv/android/xposed/installer/LogsFragment.java b/app/src/main/java/de/robv/android/xposed/installer/LogsFragment.java index bd6e750fd..654735e81 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/LogsFragment.java +++ b/app/src/main/java/de/robv/android/xposed/installer/LogsFragment.java @@ -81,6 +81,12 @@ public void onClick(View v) { return v; } + @Override + public void onResume() { + super.onResume(); + getActivity().setTitle(R.string.nav_item_logs); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_logs, menu); diff --git a/app/src/main/java/de/robv/android/xposed/installer/ModulesFragment.java b/app/src/main/java/de/robv/android/xposed/installer/ModulesFragment.java index 85a9c6fa0..7a1c8e957 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/ModulesFragment.java +++ b/app/src/main/java/de/robv/android/xposed/installer/ModulesFragment.java @@ -153,6 +153,12 @@ public void onActivityCreated(Bundle savedInstanceState) { setHasOptionsMenu(true); } + @Override + public void onResume() { + super.onResume(); + getActivity().setTitle(R.string.nav_item_modules); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // TODO maybe enable again after checking the implementation diff --git a/app/src/main/java/de/robv/android/xposed/installer/WelcomeActivity.java b/app/src/main/java/de/robv/android/xposed/installer/WelcomeActivity.java index f3c133517..cef4ae79c 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/WelcomeActivity.java +++ b/app/src/main/java/de/robv/android/xposed/installer/WelcomeActivity.java @@ -5,20 +5,16 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.os.Handler; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.view.animation.Animation; -import android.view.animation.Transformation; -import android.widget.LinearLayout; import de.robv.android.xposed.installer.installation.StatusInstallerFragment; import de.robv.android.xposed.installer.util.Loader; @@ -29,15 +25,14 @@ import de.robv.android.xposed.installer.util.ThemeUtil; public class WelcomeActivity extends XposedBaseActivity implements NavigationView.OnNavigationItemSelectedListener, - ModuleListener, Loader.Listener { + DrawerLayout.DrawerListener, ModuleListener, Loader.Listener { - private static final String SELECTED_ITEM_ID = "SELECTED_ITEM_ID"; - private final Handler mDrawerHandler = new Handler(); private RepoLoader mRepoLoader; private DrawerLayout mDrawerLayout; - private int mPrevSelectedId; private NavigationView mNavigationView; - private int mSelectedId; + private Fragment fragmentToOpen; + private Class activityToOpen; + private int currItemId; @Override protected void onCreate(Bundle savedInstanceState) { @@ -46,57 +41,27 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_welcome); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - mNavigationView = (NavigationView) findViewById(R.id.navigation_view); - assert mNavigationView != null; - mNavigationView.setNavigationItemSelectedListener(this); - ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, - mDrawerLayout, toolbar, R.string.navigation_drawer_open, - R.string.navigation_drawer_close) { - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - super.onDrawerSlide(drawerView, 0); // this disables the arrow @ completed state - } + setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); + ActionBar ab = getSupportActionBar(); + if (ab != null) { + ab.setDisplayHomeAsUpEnabled(true); + ab.setHomeAsUpIndicator(R.drawable.ic_menu); + } - @Override - public void onDrawerSlide(View drawerView, float slideOffset) { - super.onDrawerSlide(drawerView, 0); // this disables the animation - } - }; - mDrawerLayout.addDrawerListener(mDrawerToggle); - mDrawerToggle.syncState(); + mDrawerLayout.addDrawerListener(this); + mNavigationView.setNavigationItemSelectedListener(this); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - mSelectedId = mNavigationView.getMenu().getItem(prefs.getInt("default_view", 0)).getItemId(); - mSelectedId = savedInstanceState == null ? mSelectedId : savedInstanceState.getInt(SELECTED_ITEM_ID); - mPrevSelectedId = mSelectedId; - mNavigationView.getMenu().findItem(mSelectedId).setChecked(true); - - if (savedInstanceState == null) { - mDrawerHandler.removeCallbacksAndMessages(null); - mDrawerHandler.postDelayed(new Runnable() { - @Override - public void run() { - navigate(mSelectedId); - } - }, 250); - - boolean openDrawer = prefs.getBoolean("open_drawer", false); - - if (openDrawer) - mDrawerLayout.openDrawer(GravityCompat.START); - else - mDrawerLayout.closeDrawers(); - } - + int defaultViewId = prefs.getInt("default_view", 0); Bundle extras = getIntent().getExtras(); + if (extras != null) { - int value = extras.getInt("fragment", prefs.getInt("default_view", 0)); - switchFragment(value); + int intentViewId = extras.getInt("fragment", defaultViewId); + switchFragment(intentViewId); + } else if (savedInstanceState == null) { + switchFragment(defaultViewId); } mRepoLoader = RepoLoader.getInstance(); @@ -106,108 +71,77 @@ public void run() { notifyDataSetChanged(); } - public void switchFragment(int itemId) { - mSelectedId = mNavigationView.getMenu().getItem(itemId).getItemId(); - mNavigationView.getMenu().findItem(mSelectedId).setChecked(true); - mDrawerHandler.removeCallbacksAndMessages(null); - mDrawerHandler.postDelayed(new Runnable() { - @Override - public void run() { - navigate(mSelectedId); - } - }, 250); - mDrawerLayout.closeDrawers(); + public void switchFragment(int menuItemIdx) { + int itemId = mNavigationView.getMenu().getItem(menuItemIdx).getItemId(); + prepareNavigation(itemId); + navigate(); + mNavigationView.getMenu().findItem(itemId).setChecked(true); } - private void navigate(final int itemId) { - final View elevation = findViewById(R.id.elevation); - Fragment navFragment = null; + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { + // True selects menu item, false doesn't + return prepareNavigation(menuItem.getItemId()); + } + + @Override + public void onDrawerClosed(View drawerView) { + navigate(); + } + + private boolean prepareNavigation(int itemId) { switch (itemId) { case R.id.nav_item_framework: - mPrevSelectedId = itemId; - setTitle(R.string.app_name); - navFragment = new StatusInstallerFragment(); + fragmentToOpen = new StatusInstallerFragment(); break; case R.id.nav_item_modules: - mPrevSelectedId = itemId; - setTitle(R.string.nav_item_modules); - navFragment = new ModulesFragment(); + fragmentToOpen = new ModulesFragment(); break; case R.id.nav_item_downloads: - mPrevSelectedId = itemId; - setTitle(R.string.nav_item_download); - navFragment = new DownloadFragment(); + fragmentToOpen = new DownloadFragment(); break; case R.id.nav_item_logs: - mPrevSelectedId = itemId; - setTitle(R.string.nav_item_logs); - navFragment = new LogsFragment(); + fragmentToOpen = new LogsFragment(); break; case R.id.nav_item_settings: - startActivity(new Intent(this, SettingsActivity.class)); - mNavigationView.getMenu().findItem(mPrevSelectedId).setChecked(true); - return; + activityToOpen = SettingsActivity.class; + break; case R.id.nav_item_support: - startActivity(new Intent(this, SupportActivity.class)); - mNavigationView.getMenu().findItem(mPrevSelectedId).setChecked(true); - return; + activityToOpen = SupportActivity.class; + break; case R.id.nav_item_about: - startActivity(new Intent(this, AboutActivity.class)); - mNavigationView.getMenu().findItem(mPrevSelectedId).setChecked(true); - return; + activityToOpen = AboutActivity.class; } - final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(4)); + if (activityToOpen == null) + currItemId = itemId; - if (navFragment != null) { - FragmentTransaction transaction = getFragmentManager().beginTransaction(); - transaction.setCustomAnimations(R.animator.fade_in, R.animator.fade_out); - try { - transaction.replace(R.id.content_frame, navFragment).commit(); - - if (elevation != null) { - Animation a = new Animation() { - @Override - protected void applyTransformation(float interpolatedTime, Transformation t) { - elevation.setLayoutParams(params); - } - }; - a.setDuration(150); - elevation.startAnimation(a); - } - } catch (IllegalStateException ignored) { - } - } + mDrawerLayout.closeDrawers(); + + // Returns true if Fragment, false if Activity + return (activityToOpen == null); } - public int dp(float value) { - float density = getApplicationContext().getResources().getDisplayMetrics().density; + private void navigate() { + if (fragmentToOpen != null) { + FragmentTransaction transaction = getFragmentManager().beginTransaction(); - if (value == 0) { - return 0; + if (getFragmentManager().findFragmentById(R.id.content_frame) != null) { + transaction.replace(R.id.content_frame, fragmentToOpen, String.valueOf(currItemId)) + .addToBackStack(null) + .commit(); + } else { + transaction.add(R.id.content_frame, fragmentToOpen, String.valueOf(currItemId)) + .commit(); + } } - return (int) Math.ceil(density * value); - } - @Override - public boolean onNavigationItemSelected(MenuItem menuItem) { - menuItem.setChecked(true); - mSelectedId = menuItem.getItemId(); - mDrawerHandler.removeCallbacksAndMessages(null); - mDrawerHandler.postDelayed(new Runnable() { - @Override - public void run() { - navigate(mSelectedId); - } - }, 250); - mDrawerLayout.closeDrawers(); - return true; - } + if (activityToOpen != null) { + startActivity(new Intent(this, activityToOpen)); + } - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(SELECTED_ITEM_ID, mSelectedId); + activityToOpen = null; + fragmentToOpen = null; } @Override @@ -216,6 +150,23 @@ public void onBackPressed() { mDrawerLayout.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); + // Reselect previous menu items when navigating through the back stack + mNavigationView.getMenu() + .findItem(Integer.parseInt(getFragmentManager().findFragmentById(R.id.content_frame).getTag())) + .setChecked(true); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + // Open the navigation drawer if the hamburger button was clicked + mDrawerLayout.openDrawer(GravityCompat.START); + return true; + + default: + return super.onOptionsItemSelected(item); } } @@ -264,4 +215,13 @@ protected void onDestroy() { ModuleUtil.getInstance().removeListener(this); mRepoLoader.removeListener(this); } + + @Override + public void onDrawerSlide(View drawerView, float slideOffset) {} + + @Override + public void onDrawerOpened(View drawerView) {} + + @Override + public void onDrawerStateChanged(int newState) {} } diff --git a/app/src/main/java/de/robv/android/xposed/installer/installation/StatusInstallerFragment.java b/app/src/main/java/de/robv/android/xposed/installer/installation/StatusInstallerFragment.java index dee5fa9e8..ab84144fb 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/installation/StatusInstallerFragment.java +++ b/app/src/main/java/de/robv/android/xposed/installer/installation/StatusInstallerFragment.java @@ -136,6 +136,7 @@ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) @Override public void onResume() { super.onResume(); + getActivity().setTitle(R.string.app_name); refreshInstallStatus(); } diff --git a/app/src/main/res/drawable-anydpi/ic_cloud.xml b/app/src/main/res/drawable-anydpi/ic_cloud.xml index 0ca5119d0..1abb21bac 100644 --- a/app/src/main/res/drawable-anydpi/ic_cloud.xml +++ b/app/src/main/res/drawable-anydpi/ic_cloud.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/app/src/main/res/drawable-anydpi/ic_cloud_download.xml b/app/src/main/res/drawable-anydpi/ic_cloud_download.xml index 846ad3947..787b8daa8 100644 --- a/app/src/main/res/drawable-anydpi/ic_cloud_download.xml +++ b/app/src/main/res/drawable-anydpi/ic_cloud_download.xml @@ -5,5 +5,5 @@ android:viewportHeight="24.0"> + android:fillColor="#757575"/> diff --git a/app/src/main/res/drawable-anydpi/ic_cloud_off.xml b/app/src/main/res/drawable-anydpi/ic_cloud_off.xml index 1e753cf4c..75b3b6969 100644 --- a/app/src/main/res/drawable-anydpi/ic_cloud_off.xml +++ b/app/src/main/res/drawable-anydpi/ic_cloud_off.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/app/src/main/res/drawable-anydpi/ic_menu.xml b/app/src/main/res/drawable-anydpi/ic_menu.xml new file mode 100644 index 000000000..8520c4bc9 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_menu.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/status_installer.xml b/app/src/main/res/layout/status_installer.xml index c26558c48..de29bef4f 100644 --- a/app/src/main/res/layout/status_installer.xml +++ b/app/src/main/res/layout/status_installer.xml @@ -6,12 +6,13 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginBottom="8dp" android:layout_marginTop="?attr/actionBarSize"> + android:layout_height="match_parent" + android:layout_marginBottom="8dp" + android:clipToPadding="false">