Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.
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
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ dependencies {
implementation(projects.gradlePluginConfig)
implementation(projects.idestats)
implementation(projects.subprojects.aaptcompiler)
implementation(projects.subprojects.appintro)
implementation(projects.subprojects.javacServices)
implementation(projects.subprojects.javapoet)
implementation(projects.subprojects.xmlUtils)
Expand Down
46 changes: 25 additions & 21 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,27 @@
android:installLocation="internalOnly"
tools:ignore="Instantiatable">

<permission
android:description="@string/permdesc_bind_logger_service"
android:label="@string/permlab_bind_logger_service"
android:name="com.itsaky.androidide.permission.BIND_LOG_SERVICE"
android:protectionLevel="normal"
tools:ignore="ManifestOrder" />


<uses-permission android:name="com.itsaky.androidide.permission.BIND_LOG_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application
android:allowBackup="false"
android:allowNativeHeapPointerTagging="false"
Expand All @@ -18,7 +39,7 @@
android:resizeableActivity="false"
android:supportsRtl="true"
android:theme="@style/Theme.AndroidIDE"
tools:ignore="UnusedAttribute,MediaCapabilities">
tools:ignore="DiscouragedApi,MediaCapabilities,UnusedAttribute">
<activity
android:exported="true"
android:name=".activities.CrashHandlerActivity"
Expand All @@ -28,15 +49,16 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity
android:exported="true"
android:name=".activities.SplashActivity"
android:theme="@style/AppTheme.Splash">
android:name=".activities.OnboardingActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:exported="false"
android:name=".activities.MainActivity"
Expand Down Expand Up @@ -112,22 +134,4 @@
android:value="true" />
</service>
</application>

<permission
android:description="@string/permdesc_bind_logger_service"
android:label="@string/permlab_bind_logger_service"
android:name="com.itsaky.androidide.permission.BIND_LOG_SERVICE"
android:protectionLevel="normal" />

<uses-permission android:name="com.itsaky.androidide.permission.BIND_LOG_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ class TerminalSidebarAction(context: Context, override val order: Int) : Abstrac
val context = data.requireContext()
val intent = Intent(context, TerminalActivity::class.java).apply {
putExtra(
TerminalActivity.KEY_WORKING_DIRECTORY,
TERMUX_ACTIVITY.EXTRA_SESSION_WORKING_DIR,
Objects.requireNonNull(IProjectManager.getInstance().projectDirPath)
)
putExtra(
TerminalActivity.KEY_SESSION_NAME,
TERMUX_ACTIVITY.EXTRA_SESSION_NAME,
IProjectManager.getInstance().rootProject?.rootProject?.name
)
putExtra(TERMUX_ACTIVITY.EXTRA_FAILSAFE_SESSION, isFailsafe)
Expand Down
100 changes: 3 additions & 97 deletions app/src/main/java/com/itsaky/androidide/activities/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,12 @@ import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.text.TextUtils
import android.text.method.LinkMovementMethod
import android.view.View
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.activity.viewModels
import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible
import androidx.transition.TransitionManager
import androidx.transition.doOnEnd
import com.blankj.utilcode.util.SizeUtils
import com.google.android.material.transition.MaterialSharedAxis
import com.itsaky.androidide.activities.editor.EditorActivityKt
import com.itsaky.androidide.app.LimitlessIDEActivity
Expand All @@ -40,15 +36,12 @@ import com.itsaky.androidide.preferences.internal.NO_OPENED_PROJECT
import com.itsaky.androidide.preferences.internal.autoOpenProjects
import com.itsaky.androidide.preferences.internal.confirmProjectOpen
import com.itsaky.androidide.preferences.internal.lastOpenedProject
import com.itsaky.androidide.preferences.internal.prefManager
import com.itsaky.androidide.preferences.internal.statConsentDialogShown
import com.itsaky.androidide.preferences.internal.statOptIn
import com.itsaky.androidide.projects.ProjectManagerImpl
import com.itsaky.androidide.resources.R.string
import com.itsaky.androidide.templates.ITemplateProvider
import com.itsaky.androidide.utils.DialogUtils
import com.itsaky.androidide.utils.Environment
import com.itsaky.androidide.utils.flashError
import com.itsaky.androidide.utils.flashInfo
import com.itsaky.androidide.viewmodel.MainViewModel
import com.itsaky.androidide.viewmodel.MainViewModel.Companion.SCREEN_MAIN
Expand Down Expand Up @@ -88,21 +81,7 @@ class MainActivity : LimitlessIDEActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (!checkDeviceSupported()) {
return
}

showStatConsentDialogIfNeeded {

app.reportStatsIfNecessary()

if (!checkToolsIsInstalled()) {
showDialogInstallJdkSdk()
} else {
openLastProject()
}
}
openLastProject()

viewModel.currentScreen.observe(this) { screen ->
if (screen == -1) {
Expand All @@ -125,30 +104,8 @@ class MainActivity : LimitlessIDEActivity() {
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}

private fun showStatConsentDialogIfNeeded(onResult: () -> Unit) {
if (statConsentDialogShown) {
onResult()
return
}

DialogUtils.newMaterialDialogBuilder(this).apply {
setTitle(string.title_androidide_statistics)
setMessage(string.msg_androidide_statistics)
setCancelable(false)
setPositiveButton(string.btn_opt_in) { dialog, _ ->
dialog.dismiss()
statOptIn = true
}
setNegativeButton(string.btn_no_thanks) { dialog, _ ->
dialog.dismiss()
statOptIn = false
}
setOnDismissListener {
statConsentDialogShown = true
onResult()
}
show()
}
private fun openOnboarding() {
startActivity(Intent(this, OnboardingActivity::class.java))
}

override fun onInsetsUpdated(insets: Rect) {
Expand Down Expand Up @@ -194,58 +151,11 @@ class MainActivity : LimitlessIDEActivity() {
}
}

override fun onStorageDenied() {
flashError(string.msg_storage_denied)
finishAffinity()
}

override fun bindLayout(): View {
_binding = ActivityMainBinding.inflate(layoutInflater)
return binding.root
}

private fun showDialogInstallJdkSdk() {
val dp24 = SizeUtils.dp2px(24f)
val builder = DialogUtils.newMaterialDialogBuilder(this)
builder.setTitle(string.title_warning)
val view = TextView(this)
view.setPaddingRelative(dp24, dp24, dp24, dp24)
view.text = HtmlCompat.fromHtml(getString(string.msg_require_install_jdk_and_android_sdk),
HtmlCompat.FROM_HTML_MODE_COMPACT)
view.movementMethod = LinkMovementMethod.getInstance()
builder.setView(view)
builder.setCancelable(false)
builder.setPositiveButton(android.R.string.ok) { _, _ -> openTerminal() }
builder.setNegativeButton(android.R.string.cancel) { _, _ -> finishAffinity() }
builder.setNeutralButton(string.btn_docs) { _, _ -> app.openDocs(); finishAffinity() }
builder.show()
}

private fun openTerminal() {
startActivity(Intent(this, TerminalActivity::class.java))
}

private fun checkDeviceSupported(): Boolean {
val configProvider = IDEBuildConfigProvider.getInstance()

if (!configProvider.supportsBuildFlavor()) {
DialogUtils.showUnSupportedDevice(this, configProvider.flavorArch.abi,
configProvider.deviceArch.abi)
return false
}

if (configProvider.flavorArch != configProvider.deviceArch) {
// IDE's build flavor is NOT the primary arch of the device
// warn the user
if (!prefManager.getBoolean("ide.archConfig.experimentalWarning.isShown", false)) {
DialogUtils.showExperimentalArchSupportWarning(this, configProvider.flavorArch.abi,
configProvider.deviceArch.abi)
}
}

return true
}

private fun openLastProject() {
binding.root.post { tryOpenLastProject() }
}
Expand Down Expand Up @@ -295,10 +205,6 @@ class MainActivity : LimitlessIDEActivity() {
startActivity(Intent(this, EditorActivityKt::class.java))
}

private fun checkToolsIsInstalled(): Boolean {
return Environment.JAVA.exists() && Environment.ANDROID_HOME.exists()
}

override fun onDestroy() {
ITemplateProvider.getInstance().release()
super.onDestroy()
Expand Down
Loading