From 34c821b80ca767b7179f1eba03dc02db6d795992 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Mon, 3 Jan 2022 14:42:15 +0530 Subject: [PATCH] Refactor code in MainActivity --- .../com/itsaky/androidide/MainActivity.java | 569 +++++++++--------- 1 file changed, 277 insertions(+), 292 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/MainActivity.java b/app/src/main/java/com/itsaky/androidide/MainActivity.java index 612168cca..d4e5f9ffa 100755 --- a/app/src/main/java/com/itsaky/androidide/MainActivity.java +++ b/app/src/main/java/com/itsaky/androidide/MainActivity.java @@ -1,32 +1,36 @@ /************************************************************************************ * This file is part of AndroidIDE. * - * + * * * AndroidIDE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * AndroidIDE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with AndroidIDE. If not, see . * -**************************************************************************************/ + **************************************************************************************/ package com.itsaky.androidide; import abhishekti7.unicorn.filepicker.UnicornFilePicker; + import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.view.View; + +import androidx.annotation.NonNull; import androidx.transition.Transition; import androidx.transition.TransitionManager; + import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.transition.MaterialContainerTransform; import com.itsaky.androidide.app.StudioActivity; @@ -46,65 +50,67 @@ import com.itsaky.androidide.utils.DialogUtils; import com.itsaky.androidide.utils.ProjectFinder; import com.itsaky.androidide.utils.TransformUtils; import com.itsaky.toaster.Toaster; + import java.io.File; import java.util.ArrayList; +import java.util.Objects; import java.util.concurrent.Callable; public class MainActivity extends StudioActivity implements View.OnClickListener, ProjectWriterCallback { - - private ActivityMainBinding binding; + + private ActivityMainBinding binding; private LayoutCreateProjectBinding createBinding; - private LayoutCreateProjectContentBinding createLayoutBinding; - + private LayoutCreateProjectContentBinding createLayoutBinding; + private ProgressSheet mProgressSheet; - - private ArrayList mTemplates = new ArrayList(); - + + private ArrayList mTemplates = new ArrayList<> (); + private int currentTemplateIndex = 0; - - @Override - protected View bindLayout() { - binding = ActivityMainBinding.inflate(getLayoutInflater()); - createBinding = binding.createLayout; - createLayoutBinding = createBinding.createProjectContent; - return binding.getRoot(); - } - + @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - binding.createProject.setOnClickListener(this); - binding.openProject.setOnClickListener(this); - binding.openTerminal.setOnClickListener(this); - createBinding.createprojectClose.setOnClickListener(this); - createLayoutBinding.createprojectCreate.setOnClickListener(this); - createLayoutBinding.previousCard.setOnClickListener(this); - createLayoutBinding.nextCard.setOnClickListener(this); - binding.createNewCard.setVisibility(View.GONE); - - currentTemplateIndex = 0; - createTemplates(); - createProgressSheet(); - showTemplate(currentTemplateIndex); - - binding.gotoPreferences.setOnClickListener(this); + protected View bindLayout () { + binding = ActivityMainBinding.inflate (getLayoutInflater ()); + createBinding = binding.createLayout; + createLayoutBinding = createBinding.createProjectContent; + return binding.getRoot (); + } + + @Override + protected void onCreate (Bundle savedInstanceState) { + super.onCreate (savedInstanceState); - binding.getRoot().post(() -> { - PreferenceManager manager = getApp().getPrefManager(); - if(manager.autoOpenProject() && manager.wasProjectOpened() && ConstantsBridge.SPLASH_TO_MAIN) { - String path = manager.getOpenedProject(); - if(path == null && path.trim().isEmpty()) { - getApp().toast(R.string.msg_opened_project_does_not_exist, Toaster.Type.INFO); + binding.createProject.setOnClickListener (this); + binding.openProject.setOnClickListener (this); + binding.openTerminal.setOnClickListener (this); + createBinding.createprojectClose.setOnClickListener (this); + createLayoutBinding.createprojectCreate.setOnClickListener (this); + createLayoutBinding.previousCard.setOnClickListener (this); + createLayoutBinding.nextCard.setOnClickListener (this); + binding.createNewCard.setVisibility (View.GONE); + + currentTemplateIndex = 0; + createTemplates (); + createProgressSheet (); + showTemplate (currentTemplateIndex); + + binding.gotoPreferences.setOnClickListener (this); + + binding.getRoot ().post (() -> { + PreferenceManager manager = getApp ().getPrefManager (); + if (manager.autoOpenProject () && manager.wasProjectOpened () && ConstantsBridge.SPLASH_TO_MAIN) { + String path = manager.getOpenedProject (); + if (path == null || path.trim ().isEmpty ()) { + getApp ().toast (R.string.msg_opened_project_does_not_exist, Toaster.Type.INFO); } else { - File root = new File(manager.getOpenedProject()); - if(!root.exists()) { - getApp().toast(R.string.msg_opened_project_does_not_exist, Toaster.Type.INFO); + File root = new File (manager.getOpenedProject ()); + if (!root.exists ()) { + getApp ().toast (R.string.msg_opened_project_does_not_exist, Toaster.Type.INFO); } else { - if(manager.confirmProjectOpen()) { - askProjectOpenPermission(root); + if (manager.confirmProjectOpen ()) { + askProjectOpenPermission (root); } else { - openProject(root); + openProject (root); } } } @@ -113,307 +119,286 @@ public class MainActivity extends StudioActivity implements View.OnClickListener ConstantsBridge.SPLASH_TO_MAIN = false; }); } - - private void askProjectOpenPermission(File root) { + + private void askProjectOpenPermission (File root) { final MaterialAlertDialogBuilder builder = DialogUtils.newMaterialDialogBuilder (this); - builder.setTitle(R.string.title_confirm_open_project); - builder.setMessage(getString(R.string.msg_confirm_open_project, root.getAbsolutePath())); - builder.setCancelable(false); - builder.setPositiveButton(android.R.string.yes, (d, w) -> openProject(root)); - builder.setNegativeButton(android.R.string.no, null); - builder.show(); + builder.setTitle (R.string.title_confirm_open_project); + builder.setMessage (getString (R.string.msg_confirm_open_project, root.getAbsolutePath ())); + builder.setCancelable (false); + builder.setPositiveButton (android.R.string.yes, (d, w) -> openProject (root)); + builder.setNegativeButton (android.R.string.no, null); + builder.show (); } - - private void gotoSettings() { - startActivity(new Intent(this, PreferencesActivity.class)); - } - - @Override - protected void onStorageGranted() { - } - - @Override - protected void onStorageDenied() { - getApp().toast(R.string.msg_storage_denied, Toaster.Type.ERROR); - finishAffinity(); - } - + + private void gotoSettings () { + startActivity (new Intent (this, PreferencesActivity.class)); + } + @Override - public void onClick(View p1) { - if (p1.getId() == binding.createProject.getId()) { - showCreateProject(); - } else if (p1.getId() == createBinding.createprojectClose.getId()) { - hideCreateProject(); - } else if (p1.getId() == createLayoutBinding.nextCard.getId()) { + protected void onStorageGranted () { + } + + @Override + protected void onStorageDenied () { + getApp ().toast (R.string.msg_storage_denied, Toaster.Type.ERROR); + finishAffinity (); + } + + @Override + public void onClick (View p1) { + if (p1.getId () == binding.createProject.getId ()) { + showCreateProject (); + } else if (p1.getId () == createBinding.createprojectClose.getId ()) { + hideCreateProject (); + } else if (p1.getId () == createLayoutBinding.nextCard.getId ()) { currentTemplateIndex++; - if (currentTemplateIndex >= mTemplates.size()) currentTemplateIndex = 0; - showTemplate(currentTemplateIndex); - } else if (p1.getId() == createLayoutBinding.previousCard.getId()) { + if (currentTemplateIndex >= mTemplates.size ()) { + currentTemplateIndex = 0; + } + showTemplate (currentTemplateIndex); + } else if (p1.getId () == createLayoutBinding.previousCard.getId ()) { currentTemplateIndex--; - if (currentTemplateIndex < 0) currentTemplateIndex = mTemplates.size() - 1; - showTemplate(currentTemplateIndex); - } else if (p1.getId() == createLayoutBinding.createprojectCreate.getId()) { - createNewProject(); - } else if (p1.getId() == binding.gotoPreferences.getId()) { - gotoSettings(); - } else if (p1.getId() == binding.openProject.getId()) { - pickProject(); - } else if(p1.getId() == binding.openTerminal.getId()) { - startActivity(new Intent(this, TerminalActivity.class)); + if (currentTemplateIndex < 0) { + currentTemplateIndex = mTemplates.size () - 1; + } + showTemplate (currentTemplateIndex); + } else if (p1.getId () == createLayoutBinding.createprojectCreate.getId ()) { + createNewProject (); + } else if (p1.getId () == binding.gotoPreferences.getId ()) { + gotoSettings (); + } else if (p1.getId () == binding.openProject.getId ()) { + pickProject (); + } else if (p1.getId () == binding.openTerminal.getId ()) { + startActivity (new Intent (this, TerminalActivity.class)); } - } - - @Override - public void beforeBegin() { - if (mProgressSheet == null) - createProgressSheet(); - - setMessage(R.string.msg_begin_project_write); } - + @Override - public void onProcessTask(String taskName) { - setMessage(taskName); + public void beforeBegin () { + if (mProgressSheet == null) { + createProgressSheet (); + } + + setMessage (R.string.msg_begin_project_write); } - + @Override - public void onSuccess(File root) { - if (mProgressSheet != null) - createProgressSheet(); - - if (mProgressSheet.isShowing()) - mProgressSheet.dismiss(); - getApp().toast(R.string.project_created_successfully, Toaster.Type.SUCCESS); - - openProject(root); + public void onProcessTask (String taskName) { + setMessage (taskName); } - + @Override - public void onFailed(String reason) { - if (mProgressSheet != null) - createProgressSheet(); - - if (mProgressSheet.isShowing()) - mProgressSheet.dismiss(); - getApp().toast(reason, Toaster.Type.ERROR); + public void onSuccess (File root) { + if (mProgressSheet == null) { + createProgressSheet (); + } + + if (mProgressSheet.isShowing ()) { + mProgressSheet.dismiss (); + } + getApp ().toast (R.string.project_created_successfully, Toaster.Type.SUCCESS); + + openProject (root); } - + @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + public void onFailed (String reason) { + if (mProgressSheet == null) { + createProgressSheet (); + } + + if (mProgressSheet.isShowing ()) { + mProgressSheet.dismiss (); + } + getApp ().toast (reason, Toaster.Type.ERROR); + } + + @Override + protected void onActivityResult (int requestCode, int resultCode, Intent data) { + super.onActivityResult (requestCode, resultCode, data); if (requestCode == abhishekti7.unicorn.filepicker.utils.Constants.REQ_UNICORN_FILE && resultCode == RESULT_OK) { - ArrayList files = data.getStringArrayListExtra("filePaths"); + ArrayList files = data.getStringArrayListExtra ("filePaths"); if (files != null) { - if (files.size() == 1) { - File choosenDir = new File(files.get(0)); - if (choosenDir.exists() && choosenDir.isDirectory()) { - openProject(choosenDir); + if (files.size () == 1) { + File choseDir = new File (files.get (0)); + if (choseDir.exists () && choseDir.isDirectory ()) { + openProject (choseDir); } else { - getApp().toast(R.string.msg_picked_isnt_dir, Toaster.Type.ERROR); - choosenDir = null; + getApp ().toast (R.string.msg_picked_isnt_dir, Toaster.Type.ERROR); } } else { - getApp().toast(R.string.msg_pick_single_file, Toaster.Type.ERROR); + getApp ().toast (R.string.msg_pick_single_file, Toaster.Type.ERROR); } } - } + } } - + @Override - public void onBackPressed() { - if(binding.createNewCard.getVisibility() == View.VISIBLE) { - hideCreateProject(); + public void onBackPressed () { + if (binding.createNewCard.getVisibility () == View.VISIBLE) { + hideCreateProject (); } else { - super.onBackPressed(); + super.onBackPressed (); } } - + @Override - protected void onResume() { - super.onResume(); - if(mProgressSheet != null - && mProgressSheet.isShowing()) { - mProgressSheet.dismiss(); + protected void onResume () { + super.onResume (); + if (mProgressSheet != null + && mProgressSheet.isShowing ()) { + mProgressSheet.dismiss (); } } - - private void showTemplate(int index) { - if (index < 0 || index >= mTemplates.size()) return; - final ProjectTemplate template = mTemplates.get(index); - createLayoutBinding.createprojectTemplateLabel.setText(template.getName()); - createLayoutBinding.createprojectTemplateDescription.setText(template.getDescription()); - createLayoutBinding.createprojectTemplateImage.setImageResource(template.getImageId()); + + private void showTemplate (int index) { + if (index < 0 || index >= mTemplates.size ()) { + return; + } + final ProjectTemplate template = mTemplates.get (index); + createLayoutBinding.createprojectTemplateLabel.setText (template.getName ()); + createLayoutBinding.createprojectTemplateDescription.setText (template.getDescription ()); + createLayoutBinding.createprojectTemplateImage.setImageResource (template.getImageId ()); } - + /** * Must be called in/after onViewCreated */ - private void createTemplates() { - mTemplates = new ArrayList<>(); - - ProjectTemplate - empty = new ProjectTemplate() - .setId(0) - .setName(this, R.string.template_empty) - .setDescription(this, R.string.template_description_empty) - .setImageId(R.drawable.template_empty), - basic = new ProjectTemplate() - .setId(1) - .setName(this, R.string.template_basic) - .setDescription(this, R.string.template_description_basic) - .setImageId(R.drawable.template_basic), - drawer = new ProjectTemplate() - .setId(2) - .setName(this, R.string.template_navigation_drawer) - .setDescription(this, R.string.template_description_navigation_drawer) - .setImageId(R.drawable.template_navigation_drawer); - mTemplates.add(empty); - mTemplates.add(basic); - mTemplates.add(drawer); - + private void createTemplates () { + mTemplates = new ArrayList<> (); + + ProjectTemplate + empty = new ProjectTemplate () + .setId (0) + .setName (this, R.string.template_empty) + .setDescription (this, R.string.template_description_empty) + .setImageId (R.drawable.template_empty), + basic = new ProjectTemplate () + .setId (1) + .setName (this, R.string.template_basic) + .setDescription (this, R.string.template_description_basic) + .setImageId (R.drawable.template_basic), + drawer = new ProjectTemplate () + .setId (2) + .setName (this, R.string.template_navigation_drawer) + .setDescription (this, R.string.template_description_navigation_drawer) + .setImageId (R.drawable.template_navigation_drawer); + mTemplates.add (empty); + mTemplates.add (basic); + mTemplates.add (drawer); + } - - private void createProgressSheet() { - mProgressSheet = new ProgressSheet(); - mProgressSheet.setShowShadow(false); + + private void createProgressSheet () { + mProgressSheet = new ProgressSheet (); + mProgressSheet.setShowShadow (false); } - - private void setMessage(int msg) { - setMessage(getString(msg)); + + private void setMessage (int msg) { + setMessage (getString (msg)); } - - private void setMessage(String msg) { - mProgressSheet.setMessage(msg); + + private void setMessage (String msg) { + mProgressSheet.setMessage (msg); } - - private void openProject(File root) { - setMessage(R.string.msg_opening_project); - mProgressSheet.setCancelable(false); - mProgressSheet.show(getSupportFragmentManager(), "opening_project"); - - new TaskExecutor().executeAsync(new ProjectReader(root), project -> openEditor(project, false)); + + private void openProject (File root) { + setMessage (R.string.msg_opening_project); + mProgressSheet.setCancelable (false); + mProgressSheet.show (getSupportFragmentManager (), "opening_project"); + + new TaskExecutor ().executeAsync (new ProjectReader (root), this::openEditor); } - - private void pickProject() { - UnicornFilePicker.from(this) - .addConfigBuilder() - .addItemDivider(false) - .selectMultipleFiles(false) - .setRootDirectory(Environment.getExternalStorageDirectory().getAbsolutePath()) - .showHiddenFiles(true) - .showOnlyDirectory(true) - .theme(R.style.AppTheme_FilePicker) - .build() - .forResult(abhishekti7.unicorn.filepicker.utils.Constants.REQ_UNICORN_FILE); + + private void pickProject () { + UnicornFilePicker.from (this) + .addConfigBuilder () + .addItemDivider (false) + .selectMultipleFiles (false) + .setRootDirectory (Environment.getExternalStorageDirectory ().getAbsolutePath ()) + .showHiddenFiles (true) + .showOnlyDirectory (true) + .theme (R.style.AppTheme_FilePicker) + .build () + .forResult (abhishekti7.unicorn.filepicker.utils.Constants.REQ_UNICORN_FILE); } - - private void openEditor(AndroidProject project, boolean finish) { -// if (mProgressSheet != null && mProgressSheet.isShowing()) { -// mProgressSheet.dismiss(); -// } + + private void openEditor (AndroidProject project) { if (project == null) { - getApp().toast(R.string.msg_invalid_project, Toaster.Type.ERROR); + getApp ().toast (R.string.msg_invalid_project, Toaster.Type.ERROR); } else { - startActivity(new Intent(this, EditorActivity.class) - .putExtra(EditorActivity.EXTRA_PROJECT, project)); - if (finish) - finish(); + startActivity (new Intent (this, EditorActivity.class) + .putExtra (EditorActivity.EXTRA_PROJECT, project)); } } - - private void createNewProject() { - final String appName = createLayoutBinding.createprojectTextAppName.getEditText().getText().toString().trim(); - final String packageName = createLayoutBinding.createprojectTextPackageName.getEditText().getText().toString().trim(); - final int minSdk = getMinSdk(); - final int targetSdk = getTargetSdk(); - - if (!isValid(appName, packageName, minSdk, targetSdk)) { - getApp().toast(R.string.invalid_values, Toaster.Type.ERROR); + + private void createNewProject () { + final String appName = Objects.requireNonNull (createLayoutBinding.createprojectTextAppName.getEditText ()).getText ().toString ().trim (); + final String packageName = Objects.requireNonNull (createLayoutBinding.createprojectTextPackageName.getEditText ()).getText ().toString ().trim (); + final int minSdk = getMinSdk (); + final int targetSdk = getTargetSdk (); + + if (!isValid (appName, packageName, minSdk, targetSdk)) { + getApp ().toast (R.string.invalid_values, Toaster.Type.ERROR); return; } - - createProject(appName, packageName, minSdk, targetSdk); + + createProject (appName, packageName, minSdk, targetSdk); } - - private void createProject(String appName, String packageName, int minSdk, int targetSdk) { - new TaskExecutor().executeAsync(new ProjectCreatorCallable(mTemplates.get(currentTemplateIndex), new NewProjectDetails(appName, packageName, minSdk, targetSdk), this), r -> {}); + + private void createProject (String appName, String packageName, int minSdk, int targetSdk) { + new TaskExecutor ().executeAsync (new ProjectCreatorCallable (mTemplates.get (currentTemplateIndex), new NewProjectDetails (appName, packageName, minSdk, targetSdk), this), r -> { + }); } - - private boolean isValid(String appName, String packageName, int minSdk, int targetSdk) { - return appName != null && appName.length() > 0 - && packageName != null && packageName.length() > 0 - && minSdk > 1 && minSdk < 99 - && targetSdk > 1 && minSdk < 99; + + private boolean isValid (String appName, String packageName, int minSdk, int targetSdk) { + return appName != null && appName.length () > 0 + && packageName != null && packageName.length () > 0 + && minSdk > 1 && minSdk < 99 + && targetSdk > 1 && targetSdk < 99; } - - private int getMinSdk() { + + private int getMinSdk () { try { - return Integer.parseInt(createLayoutBinding.createprojectTextMinSdk.getEditText().getText().toString()); - } catch (Exception e) { getApp().toast(e.getMessage(), Toaster.Type.ERROR); } + return Integer.parseInt (Objects.requireNonNull (createLayoutBinding.createprojectTextMinSdk.getEditText ()).getText ().toString ()); + } catch (Exception e) { + getApp ().toast (e.getMessage (), Toaster.Type.ERROR); + } return -1; } - - private int getTargetSdk() { + + private int getTargetSdk () { try { - return Integer.parseInt(createLayoutBinding.createprojectTextTargetSdk.getEditText().getText().toString()); - } catch (Exception e) { getApp().toast(e.getMessage(), Toaster.Type.ERROR); } + return Integer.parseInt (Objects.requireNonNull (createLayoutBinding.createprojectTextTargetSdk.getEditText ()).getText ().toString ()); + } catch (Exception e) { + getApp ().toast (e.getMessage (), Toaster.Type.ERROR); + } return -1; } - - private void showCreateProject() { - MaterialContainerTransform transform = TransformUtils.createContainerTransformFor(binding.createProject, binding.createNewCard, binding.realContainer); - TransitionManager.beginDelayedTransition(binding.getRoot(), transform); - binding.createNewCard.setVisibility(View.VISIBLE); + + private void showCreateProject () { + MaterialContainerTransform transform = TransformUtils.createContainerTransformFor (binding.createProject, binding.createNewCard, binding.realContainer); + TransitionManager.beginDelayedTransition (binding.getRoot (), transform); + binding.createNewCard.setVisibility (View.VISIBLE); } - - private void hideCreateProject() { - MaterialContainerTransform transform = TransformUtils.createContainerTransformFor(binding.createNewCard, binding.createProject, binding.realContainer); - TransitionManager.beginDelayedTransition(binding.getRoot(), transform); - binding.createNewCard.setVisibility(View.GONE); + + private void hideCreateProject () { + MaterialContainerTransform transform = TransformUtils.createContainerTransformFor (binding.createNewCard, binding.createProject, binding.realContainer); + TransitionManager.beginDelayedTransition (binding.getRoot (), transform); + binding.createNewCard.setVisibility (View.GONE); } - - private final class ProjectReader implements Callable { - - private final File root ; - - public ProjectReader(File root) { + + private static final class ProjectReader implements Callable { + + private final File root; + + public ProjectReader (File root) { this.root = root; } - + @Override - public AndroidProject call() throws Exception { - return ProjectFinder.fromFolder(root); + public AndroidProject call () throws Exception { + return ProjectFinder.fromFolder (root); } } - - private final class OnEndTransitionListener implements Transition.TransitionListener { - - Callable c; - public OnEndTransitionListener(Callable c) { - this.c = c; - } - - @Override - public void onTransitionStart(Transition p1) { - } - - @Override - public void onTransitionEnd(Transition p1) { - try { - c.call(); - } catch (Exception e) {} - } - - @Override - public void onTransitionCancel(Transition p1) { - } - - @Override - public void onTransitionPause(Transition p1) { - } - - @Override - public void onTransitionResume(Transition p1) { - } - } }