Fix: NPE when trying to exit JLS and its not started

This commit is contained in:
Akash Yadav
2021-09-23 16:23:57 +05:30
parent 59cf9740d2
commit e117d7b4b0
5 changed files with 87 additions and 66 deletions
Binary file not shown.
@@ -95,6 +95,7 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
NavigationView.OnNavigationItemSelectedListener,
DiagnosticClickListener,
EditorFragment.FileOpenListener,
EditorPagerAdapter.EditorStateListener,
IDEHandler.Provider {
private ActivityEditorBinding mBinding;
@@ -181,7 +182,8 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
symbolInput = new SymbolInputView(this);
mBinding.inputContainer.addView(symbolInput, 0, new ViewGroup.LayoutParams(-1, -2));
mBinding.editorViewPager.setOffscreenPageLimit(9);
mBinding.editorViewPager.setAdapter(mPagerAdapter);
mBinding.tabs.setupWithViewPager(mBinding.editorViewPager);
@@ -203,63 +205,7 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
setupContainers();
setupSignatureText();
}
private void getProjectFromIntent() {
this.mProject = getIntent().getParcelableExtra(EXTRA_PROJECT);
getApp().getPrefManager().setOpenedProject(this.mProject.getProjectPath());
}
private void setupSignatureText() {
GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.RECTANGLE);
gd.setColor(0xff212121);
gd.setStroke(1, 0xffffffff);
gd.setCornerRadius(8);
mBinding.symbolText.setBackgroundDrawable(gd);
mBinding.symbolText.setVisibility(View.GONE);
}
private void setupContainers() {
removeFromParent(getBuildView());
removeFromParent(getLogView());
removeFromParent(getDiagnosticsList());
removeFromParent(getSearchResultList());
mBinding.buildOutcontainer.addView(getBuildView(), new ViewGroup.LayoutParams(-1, -1));
mBinding.buildContainer.setVisibility(View.GONE);
mBinding.buildOutToolbar.setNavigationOnClickListener(v -> hideBuildResult());
mBinding.buildOutToolbar.setOnClickListener(v -> hideBuildResult());
mBinding.logOutcontainer.addView(getLogView(), new ViewGroup.LayoutParams(-1, -1));
mBinding.logContainer.setVisibility(View.GONE);
mBinding.logOutToolbar.setNavigationOnClickListener(v -> hideLogResult());
mBinding.logOutToolbar.setOnClickListener(v -> hideLogResult());
mBinding.diagListContainer.addView(getDiagnosticsList(), new ViewGroup.LayoutParams(-1, -1));
mBinding.diagContainer.setVisibility(View.GONE);
mBinding.diagToolbar.setNavigationOnClickListener(v -> hideDiagnostics());
mBinding.diagToolbar.setOnClickListener(v -> hideDiagnostics());
mBinding.searchResultsListContainer.addView(getSearchResultList(), new ViewGroup.LayoutParams(-1, -1));
mBinding.searchResultsContainer.setVisibility(View.GONE);
mBinding.searchResultsToolbar.setNavigationOnClickListener(v -> hideSearchResults());
mBinding.searchResultsToolbar.setOnClickListener(v -> hideSearchResults());
mBinding.viewOptionsCard.setVisibility(View.GONE);
mBinding.transformScrim.setVisibility(View.GONE);
mBinding.transformScrim.setOnClickListener(v -> hideViewOptions());
mBinding.viewBuildOut.setOnClickListener(v -> showBuildResult());
mBinding.viewDiags.setOnClickListener(v -> showDiagnostics());
mBinding.viewSearchResults.setOnClickListener(v -> showSearchResults());
mBinding.viewLogs.setOnClickListener(v -> showLogResult());
mBinding.viewFiles.setOnClickListener(v -> showFiles());
mBinding.viewDaemonStatus.setOnClickListener(v -> showDaemonStatus());
handleDiagnosticsResultVisibility(true);
handleSearchResultVisibility(true);
}
@Override
public void onBackPressed() {
if(mBinding.getRoot().isDrawerOpen(GravityCompat.END)) {
@@ -454,6 +400,15 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
public JLSHandler provideJLSHandler() {
return mJLSHandler;
}
@Override
public void editorStateChanged() {
for(int i=0;i<mBinding.tabs.getTabCount();i++) {
try {
mBinding.tabs.getTabAt(i).setText(mPagerAdapter.getPageTitle(i));
} catch (Throwable th) {}
}
}
public void handleSearchResults(Map<File, List<SearchResult>> results) {
getSearchResultList().setAdapter(new com.itsaky.androidide.adapters.SearchListAdapter(results, file -> {
@@ -711,10 +666,6 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
return msg;
}
/*****************************
**** Tab Related ************
*****************************/
@Override
public void onTabSelected(TabLayout.Tab tab) {
EditorFragment current = mPagerAdapter.getFrag(tab.getPosition());
@@ -1045,7 +996,63 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F
/////////////////////////////////////////////////
////////////// PRIVATE APIS /////////////////////
/////////////////////////////////////////////////
private void getProjectFromIntent() {
this.mProject = getIntent().getParcelableExtra(EXTRA_PROJECT);
getApp().getPrefManager().setOpenedProject(this.mProject.getProjectPath());
}
private void setupSignatureText() {
GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.RECTANGLE);
gd.setColor(0xff212121);
gd.setStroke(1, 0xffffffff);
gd.setCornerRadius(8);
mBinding.symbolText.setBackgroundDrawable(gd);
mBinding.symbolText.setVisibility(View.GONE);
}
private void setupContainers() {
removeFromParent(getBuildView());
removeFromParent(getLogView());
removeFromParent(getDiagnosticsList());
removeFromParent(getSearchResultList());
mBinding.buildOutcontainer.addView(getBuildView(), new ViewGroup.LayoutParams(-1, -1));
mBinding.buildContainer.setVisibility(View.GONE);
mBinding.buildOutToolbar.setNavigationOnClickListener(v -> hideBuildResult());
mBinding.buildOutToolbar.setOnClickListener(v -> hideBuildResult());
mBinding.logOutcontainer.addView(getLogView(), new ViewGroup.LayoutParams(-1, -1));
mBinding.logContainer.setVisibility(View.GONE);
mBinding.logOutToolbar.setNavigationOnClickListener(v -> hideLogResult());
mBinding.logOutToolbar.setOnClickListener(v -> hideLogResult());
mBinding.diagListContainer.addView(getDiagnosticsList(), new ViewGroup.LayoutParams(-1, -1));
mBinding.diagContainer.setVisibility(View.GONE);
mBinding.diagToolbar.setNavigationOnClickListener(v -> hideDiagnostics());
mBinding.diagToolbar.setOnClickListener(v -> hideDiagnostics());
mBinding.searchResultsListContainer.addView(getSearchResultList(), new ViewGroup.LayoutParams(-1, -1));
mBinding.searchResultsContainer.setVisibility(View.GONE);
mBinding.searchResultsToolbar.setNavigationOnClickListener(v -> hideSearchResults());
mBinding.searchResultsToolbar.setOnClickListener(v -> hideSearchResults());
mBinding.viewOptionsCard.setVisibility(View.GONE);
mBinding.transformScrim.setVisibility(View.GONE);
mBinding.transformScrim.setOnClickListener(v -> hideViewOptions());
mBinding.viewBuildOut.setOnClickListener(v -> showBuildResult());
mBinding.viewDiags.setOnClickListener(v -> showDiagnostics());
mBinding.viewSearchResults.setOnClickListener(v -> showSearchResults());
mBinding.viewLogs.setOnClickListener(v -> showLogResult());
mBinding.viewFiles.setOnClickListener(v -> showFiles());
mBinding.viewDaemonStatus.setOnClickListener(v -> showDaemonStatus());
handleDiagnosticsResultVisibility(true);
handleSearchResultVisibility(true);
}
private MaterialContainerTransform createContainerTransformFor(View start, View end) {
return createContainerTransformFor(start, end, mBinding.realContainer);
}
@@ -19,6 +19,8 @@ public class EditorPagerAdapter extends FragmentStatePagerAdapter implements Edi
private ArrayList<Fragment> mFragments;
private AndroidProject project;
private EditorStateListener mEditorStateListener;
private static final Logger LOG = Logger.instance("EditorPagerAdapter");
public EditorPagerAdapter(FragmentManager manager, AndroidProject project) {
@@ -37,6 +39,11 @@ public class EditorPagerAdapter extends FragmentStatePagerAdapter implements Edi
mOpenedFiles.addAll(files);
mFragments.addAll(fragments);
}
public EditorPagerAdapter setEditorStateListener (EditorStateListener listener) {
this.mEditorStateListener = listener;
return this;
}
public int findIndexOfEditorByFile(File file) {
for (int i=0;i < mFragments.size();i++) {
@@ -123,12 +130,14 @@ public class EditorPagerAdapter extends FragmentStatePagerAdapter implements Edi
@Override
public void onModified(EditorFragment editor) {
// Maybe implemented in future
if(mEditorStateListener != null)
mEditorStateListener.editorStateChanged();
}
@Override
public void onSaved(EditorFragment editor) {
// Maybe implemented in future
if(mEditorStateListener != null)
mEditorStateListener.editorStateChanged();
}
public List<File> getOpenedFiles() {
@@ -149,4 +158,8 @@ public class EditorPagerAdapter extends FragmentStatePagerAdapter implements Edi
public CharSequence getPageTitle(int position) {
return getFrag(position).getTabTitle();
}
public static interface EditorStateListener {
void editorStateChanged();
}
}
@@ -72,7 +72,8 @@ public class JLSHandler extends IDEHandler implements JLSRequestor {
@Override
public void stop() {
languageServer.exit();
if(languageServer != null)
languageServer.exit();
}
@Override
@@ -17,7 +17,7 @@ public class ToolsManager {
private static PreferenceManager prefs;
public static final int JLS_VERSION = 7;
public static final int JLS_VERSION = 8;
public static final int LOGSENDER_VERSION = 1;
public static final int CLEANER_VERSION = 1;
public static final int GRADLE_API_VERSION = 2;