Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,10 @@ interface ActionItem {
EDITOR_FILE_TREE("ide.editor.fileTree"),

/** Location marker for action items shown in UI Designer activity's toolbar. */
UI_DESIGNER_TOOLBAR("ide.uidesigner.toolbar");
UI_DESIGNER_TOOLBAR("ide.uidesigner.toolbar"),

/** Location marker for action items shown on the main screen. */
MAIN_SCREEN("ide.main.screen");

override fun toString(): String {
return id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ import com.itsaky.androidide.activities.editor.EditorHandlerActivity
*/
class CloseFileAction(context: Context, override val order: Int) : FileTabAction() {

override val id: String = "ide.editor.fileTab.close.current"
override val id: String = ID

companion object {
const val ID = "ide.editor.fileTab.close.current"
}

init {
label = context.getString(R.string.action_closeThis)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.MainActivity
import com.itsaky.androidide.idetooltips.TooltipTag
import com.itsaky.androidide.utils.FeatureFlags

class CloneRepositoryAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.cloneRepository"
}

override var label: String = context.getString(R.string.download_git_project)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_clone_repo)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 2

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.MAIN_GIT

override fun prepare(data: ActionData) {
super.prepare(data)
val context = data.get(Context::class.java)
if (!FeatureFlags.isExperimentsEnabled || context !is MainActivity) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) as? MainActivity ?: return false
return context.showCloneRepository()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.MainActivity
import com.itsaky.androidide.idetooltips.TooltipTag

class CreateProjectAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.createProject"
}

override var label: String = context.getString(R.string.create_project)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_add)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 0

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.PROJECT_NEW

override fun prepare(data: ActionData) {
super.prepare(data)
val context = data.get(Context::class.java)
if (context !is MainActivity) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) as? MainActivity ?: return false
return context.showCreateProject()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.idetooltips.TooltipTag
import com.itsaky.androidide.viewmodel.MainViewModel

class DeleteProjectAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.deleteProject"
}

override var label: String = context.getString(R.string.msg_delete_existing_project)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_delete)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 3

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.MAIN_PROJECT_DELETE

override fun prepare(data: ActionData) {
super.prepare(data)
if (data.get(MainViewModel::class.java) == null || data.get(Context::class.java) == null) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val viewModel = data.get(MainViewModel::class.java) ?: return false
viewModel.setScreen(MainViewModel.SCREEN_DELETE_PROJECTS)
return true
}
}
52 changes: 52 additions & 0 deletions app/src/main/java/com/itsaky/androidide/actions/main/DocsAction.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.content.Intent
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.editor.HelpActivity
import com.itsaky.androidide.idetooltips.TooltipTag
import com.itsaky.androidide.resources.R.string
import org.adfa.constants.CONTENT_KEY
import org.adfa.constants.CONTENT_TITLE_KEY

class DocsAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.docs"
}

override var label: String = context.getString(R.string.btn_docs)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_action_help_outlined)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 7

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.MAIN_HELP

override fun prepare(data: ActionData) {
super.prepare(data)
if (data.get(Context::class.java) == null) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) ?: return false
val intent =
Intent(context, HelpActivity::class.java).apply {
putExtra(CONTENT_KEY, context.getString(string.docs_url))
putExtra(CONTENT_TITLE_KEY, context.getString(string.back_to_cogo))
}
context.startActivity(intent)
return true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.actions.requireContext
import com.itsaky.androidide.utils.UrlManager

class DonateAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.donate"
}

override var label: String = context.getString(R.string.btn_donate)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_heart)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 6

override fun prepare(data: ActionData) {
super.prepare(data)
if (data.get(Context::class.java) == null) {
markInvisible()
}
markInvisible() // Until we allow donations
}

override suspend fun execAction(data: ActionData): Any {
val context = data.requireContext()
UrlManager.openUrl(context.getString(R.string.sponsor_url), null, context)
return true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.MainActivity
import com.itsaky.androidide.idetooltips.TooltipTag

class OpenProjectAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.openProject"
}

override var label: String = context.getString(R.string.msg_open_existing_project)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_folder)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 1

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.PROJECT_OPEN

override fun prepare(data: ActionData) {
super.prepare(data)
val context = data.get(Context::class.java)
if (context !is MainActivity) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) as? MainActivity ?: return false
return context.showOpenProject()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.content.Intent
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.TerminalActivity
import com.itsaky.androidide.idetooltips.TooltipTag

class OpenTerminalAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.openTerminal"
}

override var label: String = context.getString(R.string.title_terminal)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_terminal)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 4

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.MAIN_TERMINAL

override fun prepare(data: ActionData) {
super.prepare(data)
if (data.get(Context::class.java) == null) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) ?: return false
context.startActivity(Intent(context, TerminalActivity::class.java))
return true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.itsaky.androidide.actions.main

import android.content.Context
import android.content.Intent
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.markInvisible
import com.itsaky.androidide.activities.PreferencesActivity
import com.itsaky.androidide.idetooltips.TooltipTag

class PreferencesAction(context: Context) : ActionItem {

override val id: String = ID

companion object {
const val ID = "ide.main.preferences"
}

override var label: String = context.getString(R.string.msg_preferences)
override var visible: Boolean = true
override var enabled: Boolean = true
override var icon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_settings)
override var requiresUIThread: Boolean = true
override var location: ActionItem.Location = ActionItem.Location.MAIN_SCREEN
override val order: Int = 5

override fun retrieveTooltipTag(isReadOnlyContext: Boolean): String = TooltipTag.MAIN_PREFERENCES

override fun prepare(data: ActionData) {
super.prepare(data)
if (data.get(Context::class.java) == null) {
markInvisible()
}
}

override suspend fun execAction(data: ActionData): Any {
val context = data.get(Context::class.java) ?: return false
context.startActivity(Intent(context, PreferencesActivity::class.java))
return true
}
}
Loading
Loading