diff --git a/app/src/main/java/com/itsaky/androidide/adapters/viewholders/FileTreeViewHolder.java b/app/src/main/java/com/itsaky/androidide/adapters/viewholders/FileTreeViewHolder.java index 7bc4da372..6190f6239 100755 --- a/app/src/main/java/com/itsaky/androidide/adapters/viewholders/FileTreeViewHolder.java +++ b/app/src/main/java/com/itsaky/androidide/adapters/viewholders/FileTreeViewHolder.java @@ -57,7 +57,7 @@ public class FileTreeViewHolder extends TreeNode.BaseNodeViewHolder { : (int) (TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 15, context.getResources().getDisplayMetrics())); - int icon = 0; + int icon; if (file.isDirectory()) icon = R.drawable.ic_folder; else if (file.getName().endsWith(".java")) icon = R.drawable.ic_language_java; else if (file.getName().endsWith(".kt")) icon = R.drawable.ic_language_kotlin; diff --git a/app/src/main/java/com/itsaky/androidide/fragments/FileTreeFragment.java b/app/src/main/java/com/itsaky/androidide/fragments/FileTreeFragment.java index 500baafa4..f714aee6c 100755 --- a/app/src/main/java/com/itsaky/androidide/fragments/FileTreeFragment.java +++ b/app/src/main/java/com/itsaky/androidide/fragments/FileTreeFragment.java @@ -30,7 +30,6 @@ import androidx.annotation.NonNull; import androidx.transition.ChangeBounds; import androidx.transition.TransitionManager; -import com.blankj.utilcode.util.FileIOUtils; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.itsaky.androidide.R; import com.itsaky.androidide.adapters.viewholders.FileTreeViewHolder; @@ -42,7 +41,6 @@ import com.itsaky.androidide.events.ListProjectFilesRequestEvent; import com.itsaky.androidide.projects.ProjectManager; import com.itsaky.androidide.tasks.TaskExecutor; import com.itsaky.androidide.tasks.callables.FileTreeCallable; -import com.itsaky.androidide.utils.Environment; import com.itsaky.androidide.utils.ILogger; import com.unnamed.b.atv.model.TreeNode; import com.unnamed.b.atv.view.AndroidTreeView; @@ -121,29 +119,23 @@ public class FileTreeFragment extends BottomSheetDialogFragment @Override public void onClick(TreeNode node, Object p2) { - final File f = (File) p2; - if (!f.exists()) { + final File file = (File) p2; + if (!file.exists()) { return; } - if (f.isDirectory()) { + if (file.isDirectory()) { if (node.isExpanded()) { collapseNode(node); - } else if (f.getAbsolutePath().equals(Environment.GRADLE_USER_HOME.getAbsolutePath()) - && !node.isExpanded()) { - expandNode(node); } else { setLoading(node); listNode( node, - () -> { - updateChevron(node); - expandNode(node); - }); + () -> expandNode(node)); } } - final var event = new FileClickEvent(f); + final var event = new FileClickEvent(file); event.put(Context.class, requireContext()); EventBus.getDefault().post(event); } @@ -168,7 +160,7 @@ public class FileTreeFragment extends BottomSheetDialogFragment @SuppressWarnings("unused") @Subscribe(threadMode = ThreadMode.MAIN) - public void onGetListFilesRequeste(ListProjectFilesRequestEvent event) { + public void onGetListFilesRequested(ListProjectFilesRequestEvent event) { if (!isVisible() || getContext() == null) { return; } @@ -179,10 +171,12 @@ public class FileTreeFragment extends BottomSheetDialogFragment @SuppressWarnings("unused") @Subscribe(threadMode = ThreadMode.MAIN) public void onGetExpandTreeNodeRequest(ExpandTreeNodeRequestEvent event) { - if (!isVisible() || getContext() == null || event.getNode() == null) { + if (!isVisible() || getContext() == null) { return; + } else { + event.getNode(); } - + expandNode(event.getNode()); } @@ -193,6 +187,7 @@ public class FileTreeFragment extends BottomSheetDialogFragment TransitionManager.beginDelayedTransition(binding.getRoot(), new ChangeBounds()); mFileTreeView.collapseNode(node); + updateChevron(node); } public void expandNode(TreeNode node) { @@ -202,6 +197,7 @@ public class FileTreeFragment extends BottomSheetDialogFragment TransitionManager.beginDelayedTransition(binding.getRoot(), new ChangeBounds()); mFileTreeView.expandNode(node); + updateChevron(node); } public void listProjectFiles() { @@ -210,25 +206,8 @@ public class FileTreeFragment extends BottomSheetDialogFragment return; } final var projectDirPath = ProjectManager.INSTANCE.getProjectDirPath(); - final File gradleProps = Environment.GRADLE_PROPS; - final File gradleHome = Environment.GRADLE_USER_HOME; - File projectDir = new File(projectDirPath); + final var projectDir = new File(projectDirPath); mRoot = TreeNode.root(projectDir); - if (gradleHome.exists() && gradleHome.isDirectory()) { - if (!gradleProps.exists()) { - FileIOUtils.writeFileFromString( - gradleProps, - "# Specify global Gradle properties in this file\n" - + "# These properties will be applicable for every project you build" - + " with Gradle."); - } - TreeNode home = new TreeNode(gradleHome); - home.setViewHolder(new FileTreeViewHolder(getContext())); - TreeNode prop = new TreeNode(gradleProps); - prop.setViewHolder(new FileTreeViewHolder(getContext())); - home.addChild(prop); - mRoot.addChild(home); - } mRoot.setViewHolder(new FileTreeViewHolder(getContext())); binding.filetreeHorizontalScrollView.setVisibility(View.GONE); @@ -287,14 +266,14 @@ public class FileTreeFragment extends BottomSheetDialogFragment final var finalWhenDone = whenDone; TaskExecutor.execAsync( () -> { - getNodeFromFiles(node.getValue().listFiles(), node); + listFilesForNode(node.getValue().listFiles(), node); TreeNode temp = node; while (temp.size() == 1) { temp = temp.childAt(0); if (!temp.getValue().isDirectory()) { break; } - getNodeFromFiles(temp.getValue().listFiles(), temp); + listFilesForNode(temp.getValue().listFiles(), temp); temp.setExpanded(true); } return null; @@ -302,7 +281,7 @@ public class FileTreeFragment extends BottomSheetDialogFragment __ -> finalWhenDone.run()); } - private void getNodeFromFiles(File[] files, TreeNode parent) { + private void listFilesForNode(File[] files, TreeNode parent) { Arrays.sort(files, new FileTreeCallable.SortFileName()); Arrays.sort(files, new FileTreeCallable.SortFolder()); for (File file : files) { @@ -314,7 +293,7 @@ public class FileTreeFragment extends BottomSheetDialogFragment private void updateChevron(@NonNull TreeNode node) { if (node.getViewHolder() instanceof FileTreeViewHolder) { - ((FileTreeViewHolder) node.getViewHolder()).updateChevron(!node.isExpanded()); + ((FileTreeViewHolder) node.getViewHolder()).updateChevron(node.isExpanded()); } } @@ -324,15 +303,10 @@ public class FileTreeFragment extends BottomSheetDialogFragment private void tryRestoreState(String state) { if (!TextUtils.isEmpty(state) && mFileTreeView != null) { - - LOG.debug("Restoring tree view state:", "'" + state + "'"); - mFileTreeView.collapseAll(); final var openNodesArray = state.split(NODES_PATH_SEPARATOR); final var openNodes = new HashSet<>(Arrays.asList(openNodesArray)); restoreNodeState(mRoot, openNodes); - } else { - LOG.error("Unable to restore tree state", "treeState=" + state, "treeView=" + mFileTreeView); } } @@ -344,7 +318,6 @@ public class FileTreeFragment extends BottomSheetDialogFragment listNode( node, () -> { - updateChevron(node); expandNode(node); restoreNodeState(node, openNodes); }); diff --git a/app/src/main/java/com/itsaky/androidide/tasks/callables/FileTreeCallable.java b/app/src/main/java/com/itsaky/androidide/tasks/callables/FileTreeCallable.java index 4befb9014..75cde7485 100755 --- a/app/src/main/java/com/itsaky/androidide/tasks/callables/FileTreeCallable.java +++ b/app/src/main/java/com/itsaky/androidide/tasks/callables/FileTreeCallable.java @@ -33,8 +33,8 @@ import java.util.concurrent.Callable; public class FileTreeCallable implements Callable { private final Context ctx; - private TreeNode parent; - private File file; + private final TreeNode parent; + private final File file; public FileTreeCallable(Context ctx, TreeNode parent, File file) { this.ctx = ctx; diff --git a/common/src/main/java/com/itsaky/androidide/utils/Environment.java b/common/src/main/java/com/itsaky/androidide/utils/Environment.java index 268728393..811ea9c6a 100755 --- a/common/src/main/java/com/itsaky/androidide/utils/Environment.java +++ b/common/src/main/java/com/itsaky/androidide/utils/Environment.java @@ -66,7 +66,6 @@ public final class Environment { public static File INIT_SCRIPT; public static File PROJECT_DATA_FILE; - public static File GRADLE_PROPS; public static File GRADLE_USER_HOME; public static File AAPT2; public static File JAVA; @@ -97,7 +96,6 @@ public final class Environment { INIT_SCRIPT = new File(mkdirIfNotExits(new File(ANDROIDIDE_HOME, "init")), "init.gradle"); BOOTCLASSPATH = new File(""); GRADLE_USER_HOME = new File(HOME, ".gradle"); - GRADLE_PROPS = new File(GRADLE_USER_HOME, "gradle.properties"); IDE_PROPS.putAll(readProperties()); ANDROID_HOME = new File(readProp("ANDROID_HOME", DEFAULT_ANDROID_HOME)); diff --git a/tests/test-home/.androidide/init/model.jar b/tests/test-home/.androidide/init/model.jar index 4274a648a..d5fb153ba 100644 Binary files a/tests/test-home/.androidide/init/model.jar and b/tests/test-home/.androidide/init/model.jar differ diff --git a/treeview/build.gradle b/treeview/build.gradle index 9a719a55c..3e0e9ade0 100755 --- a/treeview/build.gradle +++ b/treeview/build.gradle @@ -24,4 +24,6 @@ android { dependencies { implementation fileTree (dir: 'libs', include: ['*.jar']) implementation androidx.appcompat + + implementation project (path: ':logger') } diff --git a/treeview/src/main/java/com/unnamed/b/atv/model/TreeNode.java b/treeview/src/main/java/com/unnamed/b/atv/model/TreeNode.java index 8a1a92e28..fdc1a8681 100755 --- a/treeview/src/main/java/com/unnamed/b/atv/model/TreeNode.java +++ b/treeview/src/main/java/com/unnamed/b/atv/model/TreeNode.java @@ -1,9 +1,12 @@ package com.unnamed.b.atv.model; +import static com.itsaky.androidide.utils.ILogger.newInstance; + import android.content.Context; import android.view.View; import android.view.ViewGroup; +import com.itsaky.androidide.utils.ILogger; import com.unnamed.b.atv.R; import com.unnamed.b.atv.view.AndroidTreeView; import com.unnamed.b.atv.view.TreeNodeWrapperView; @@ -19,6 +22,7 @@ import java.util.List; public class TreeNode { public static final String NODES_ID_SEPARATOR = ":"; + private static final ILogger LOG = newInstance("TreeNode"); private final List children; private int mId; private int mLastId; @@ -121,6 +125,7 @@ public class TreeNode { } public TreeNode setExpanded(boolean expanded) { + LOG.debug("TreeNode expanded state changed. New state:", expanded, new RuntimeException()); mExpanded = expanded; return this; }