From cd277dfeeb3139a94c4a02c15b7ae4b7224c484b Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Sat, 22 Jan 2022 15:19:20 +0530 Subject: [PATCH] Added clear output button for build output and logs --- .idea/misc.xml | 2 +- .../com/itsaky/androidide/EditorActivity.java | 36 ++++++++++++++++++- .../adapters/EditorBottomSheetTabAdapter.java | 4 +++ .../res/layout/layout_editor_bottom_sheet.xml | 19 +++++++--- .../inflater/util/CommonParseUtils.java | 4 +-- .../inflater/values/ValuesTableFactory.java | 2 +- 6 files changed, 58 insertions(+), 9 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index adbae967d..6d6a2581e 100755 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -20,7 +20,7 @@ - + diff --git a/app/src/main/java/com/itsaky/androidide/EditorActivity.java b/app/src/main/java/com/itsaky/androidide/EditorActivity.java index 68104e0e4..2f229aac4 100755 --- a/app/src/main/java/com/itsaky/androidide/EditorActivity.java +++ b/app/src/main/java/com/itsaky/androidide/EditorActivity.java @@ -43,6 +43,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.view.menu.MenuBuilder; +import androidx.appcompat.widget.TooltipCompat; import androidx.core.content.ContextCompat; import androidx.core.view.GravityCompat; import androidx.fragment.app.Fragment; @@ -67,6 +68,7 @@ import com.itsaky.androidide.databinding.ActivityEditorBinding; import com.itsaky.androidide.databinding.LayoutDiagnosticInfoBinding; import com.itsaky.androidide.databinding.LayoutSearchProjectBinding; import com.itsaky.androidide.fragments.FileTreeFragment; +import com.itsaky.androidide.fragments.NonEditableEditorFragment; import com.itsaky.androidide.fragments.SearchResultFragment; import com.itsaky.androidide.fragments.sheets.OptionsListFragment; import com.itsaky.androidide.fragments.sheets.ProgressSheet; @@ -258,9 +260,41 @@ public class EditorActivity extends StudioActivity implements FileTreeFragment.F } }); + mBinding.bottomSheet.tabs.addOnTabSelectedListener (new TabLayout.OnTabSelectedListener () { + + @Override + public void onTabSelected (TabLayout.Tab tab) { + final var fragment = bottomSheetTabAdapter.getFragmentAtIndex (tab.getPosition ()); + if (fragment instanceof NonEditableEditorFragment) { + mBinding.bottomSheet.clearFab.show (); + } else { + mBinding.bottomSheet.clearFab.hide (); + } + } + + @Override + public void onTabUnselected (TabLayout.Tab tab) { + + } + @Override + public void onTabReselected (TabLayout.Tab tab) { + + } + }); + + TooltipCompat.setTooltipText (mBinding.bottomSheet.clearFab, getString (R.string.title_clear_output)); + mBinding.bottomSheet.clearFab.setOnClickListener (v -> { + final var fragment = bottomSheetTabAdapter.getFragmentAtIndex (mBinding.bottomSheet.tabs.getSelectedTabPosition ()); + if (fragment instanceof NonEditableEditorFragment) { + final var editor = (NonEditableEditorFragment) fragment; + if (editor.getEditor () != null) { + editor.getEditor ().setText (""); + } + } + }); + if (!getApp ().getPrefManager ().getBoolean (KEY_BOTTOM_SHEET_SHOWN) && mEditorBottomSheet.getState () != BottomSheetBehavior.STATE_EXPANDED) { mEditorBottomSheet.setState (BottomSheetBehavior.STATE_EXPANDED); - new Handler (Looper.getMainLooper ()).postDelayed (() -> { mEditorBottomSheet.setState (BottomSheetBehavior.STATE_COLLAPSED); getApp ().getPrefManager ().putBoolean (KEY_BOTTOM_SHEET_SHOWN, true); diff --git a/app/src/main/java/com/itsaky/androidide/adapters/EditorBottomSheetTabAdapter.java b/app/src/main/java/com/itsaky/androidide/adapters/EditorBottomSheetTabAdapter.java index ee87332b9..ff1c1284c 100644 --- a/app/src/main/java/com/itsaky/androidide/adapters/EditorBottomSheetTabAdapter.java +++ b/app/src/main/java/com/itsaky/androidide/adapters/EditorBottomSheetTabAdapter.java @@ -49,6 +49,10 @@ public class EditorBottomSheetTabAdapter extends FragmentStateAdapter { this.fragments.add (new Tab (fragmentActivity.getString (R.string.view_search_results), new SearchResultFragment ())); } + public Fragment getFragmentAtIndex (int index) { + return this.fragments.get (index).fragment; + } + @NonNull @Override public Fragment createFragment (int position) { diff --git a/app/src/main/res/layout/layout_editor_bottom_sheet.xml b/app/src/main/res/layout/layout_editor_bottom_sheet.xml index 1632b4adc..2e176a888 100644 --- a/app/src/main/res/layout/layout_editor_bottom_sheet.xml +++ b/app/src/main/res/layout/layout_editor_bottom_sheet.xml @@ -14,8 +14,7 @@ ~ You should have received a copy of the GNU General Public License ~ along with AndroidIDE. If not, see . --> - - + android:background="@color/content_background" + android:layout_below="@id/tabs"/> - \ No newline at end of file + + + \ No newline at end of file diff --git a/xml-inflater/src/main/java/com/itsaky/inflater/util/CommonParseUtils.java b/xml-inflater/src/main/java/com/itsaky/inflater/util/CommonParseUtils.java index 17182329b..ecc01d816 100644 --- a/xml-inflater/src/main/java/com/itsaky/inflater/util/CommonParseUtils.java +++ b/xml-inflater/src/main/java/com/itsaky/inflater/util/CommonParseUtils.java @@ -177,18 +177,18 @@ public class CommonParseUtils { if (drawable == null) { return null; } - + try { final var parser = DrawableParserFactory.newParser (ctx, drawable, resourceFinder); if (parser == null) { return null; } - return parser.parse(); } catch (Exception e) { LOG.error ("Error parsing drawable", e); return null; } + } else if (value.startsWith("@color/")) { final String color = resourceFinder.findColor(value.substring("@color/".length())); // TODO Check if this color resource is a selector diff --git a/xml-inflater/src/main/java/com/itsaky/inflater/values/ValuesTableFactory.java b/xml-inflater/src/main/java/com/itsaky/inflater/values/ValuesTableFactory.java index f431bbbb3..454da3489 100644 --- a/xml-inflater/src/main/java/com/itsaky/inflater/values/ValuesTableFactory.java +++ b/xml-inflater/src/main/java/com/itsaky/inflater/values/ValuesTableFactory.java @@ -43,7 +43,7 @@ public class ValuesTableFactory { * @param resDirs The resource directories. */ public static void setupWithResDirectories (File... resDirs) { - + if (resDirs == null || resDirs.length <= 0) { LOG.error ("Cannot create value tables. No directories were specified."); return;