fix: add tests for MainFragment and refactor testing modules

This commit is contained in:
Akash Yadav
2023-10-07 23:37:34 +05:30
parent 3816ec5866
commit cc0a6391f6
193 changed files with 714 additions and 377 deletions
+1
View File
@@ -0,0 +1 @@
/build
+42
View File
@@ -0,0 +1,42 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
id("com.android.library")
kotlin("android")
}
android {
namespace = "${BuildConfig.packageName}.testing.android"
}
dependencies {
api(libs.tests.androidx.test.core)
api(libs.tests.androidx.test.runner)
api(libs.tests.androidx.test.rules)
api(libs.tests.androidx.junit)
api(libs.tests.androidx.espresso.core)
api(libs.tests.androidx.espresso.contrib)
api(libs.tests.androidx.uiautomator)
api(libs.tests.junit)
api(libs.tests.google.truth)
api(projects.buildInfo)
api(projects.common)
api(projects.shared)
}
View File
+21
View File
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
@@ -0,0 +1,28 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.testing.android
import android.content.Context
import androidx.annotation.StringRes
import androidx.test.core.app.ApplicationProvider
/**
* Get the value of the string resource.
*/
fun stringRes(@StringRes resource: Int, vararg formatArgs: Any) =
ApplicationProvider.getApplicationContext<Context>().getString(resource, *formatArgs)
@@ -0,0 +1,93 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.testing.android
import android.app.Activity
import android.content.Intent
import androidx.test.core.app.ApplicationProvider
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
import androidx.test.runner.lifecycle.Stage
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.app.BaseApplication
import com.itsaky.androidide.buildinfo.BuildInfo
import com.itsaky.androidide.utils.uncheckedCast
const val LAUNCH_TIMEOUT = 5000L
/**
* Launches the AndroidIDE application using UI Automator.
*
* @param fromLauncher Whether the application must be launched from the Android launcher.
* @param clearTasks Whether the application's previous tasks must be cleared.
*/
fun launchAndroidIDE(
fromLauncher: Boolean = true,
clearTasks: Boolean = true,
): UiDevice {
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
if (fromLauncher) {
device.pressHome()
val launcherPackage = device.launcherPackageName
assertThat(launcherPackage).isNotNull()
device.wait(
Until.hasObject(By.pkg(launcherPackage).depth(0)),
LAUNCH_TIMEOUT
)
}
// Launch the app
val context = ApplicationProvider.getApplicationContext<BaseApplication>()
val intent = context.packageManager.getLaunchIntentForPackage(BuildInfo.PACKAGE_NAME)
assertThat(intent).isNotNull()
if (clearTasks) {
intent!!.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
context.startActivity(intent)
// Wait for the app to appear
device.wait(
Until.hasObject(By.pkg(BuildInfo.PACKAGE_NAME).depth(0)),
LAUNCH_TIMEOUT
)
return device
}
/**
* Get the first activity in the given [stage].
*/
fun <T : Activity> getActivityInStage(stage: Stage): T? {
var activity: T? = null
InstrumentationRegistry.getInstrumentation().runOnMainSync {
val activities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(stage)
if (activities.isNotEmpty()) {
activity = uncheckedCast(activities.first())
}
}
return activity
}
@@ -0,0 +1,54 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.testing.android
import androidx.annotation.StringRes
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import com.itsaky.androidide.buildinfo.BuildInfo
/**
* @see UiDevice.waitForWindowUpdate
*/
fun UiDevice.waitForWindowUpdate(timeout: Long) =
waitForWindowUpdate(BuildInfo.PACKAGE_NAME, timeout)
/**
* @see UiDevice.hasObject
*/
fun UiDevice.hasObjectWithText(text: String) =
hasObject(By.text(text))
/**
* @see UiDevice.hasObject
*/
fun UiDevice.hasObjectWithText(@StringRes text: Int) =
hasObject(By.text(stringRes(text)))
/**
* @see UiDevice.findObject
*/
fun UiDevice.findObjectWithText(text: String): UiObject2? =
findObject(By.text(text))
/**
* @see UiDevice.findObjectWithText
*/
fun UiDevice.findObjectWithText(@StringRes text: Int): UiObject2? =
findObject(By.text(stringRes(text)))
@@ -0,0 +1,46 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.testing.android
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.Until
import com.google.common.truth.Truth.assertThat
/**
* Click this object and wait for window update with the given timeout duration.
*
* @see UiDevice.waitForWindowUpdate
*/
fun UiObject2?.clickAndWaitForWindowUpdate(device: UiDevice, timeout: Long = 500L) =
run {
assertThat(this).isNotNull()
this!!.click()
device.waitForWindowUpdate(timeout)
}
/**
* Click this object and wait for a new window to appear within the given timeout duration.
*
* @see UiObject2.clickAndWait
*/
fun UiObject2?.clickAndWaitForNewWindow(timeout: Long = LAUNCH_TIMEOUT) =
run {
assertThat(this).isNotNull()
this!!.clickAndWait(Until.newWindow(), timeout)
}
+1
View File
@@ -0,0 +1 @@
/build
+38
View File
@@ -0,0 +1,38 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
plugins {
id("com.android.library")
id("kotlin-android")
}
android {
namespace = "${BuildConfig.packageName}.lsp.testing"
}
dependencies {
api(libs.androidx.ktx)
api(libs.common.kotlin)
api(projects.lsp.api)
api(projects.actions)
api(projects.eventbusAndroid)
api(libs.common.editor)
api(projects.testing.tooling)
api(projects.testing.unit)
}
+1
View File
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,190 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.lsp.api
import android.content.Context
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.eventbus.events.editor.ChangeType.DELETE
import com.itsaky.androidide.eventbus.events.editor.DocumentChangeEvent
import com.itsaky.androidide.eventbus.events.editor.DocumentCloseEvent
import com.itsaky.androidide.eventbus.events.editor.DocumentOpenEvent
import com.itsaky.androidide.eventbus.events.file.FileDeletionEvent
import com.itsaky.androidide.eventbus.events.file.FileRenameEvent
import com.itsaky.androidide.lookup.Lookup
import com.itsaky.androidide.models.Position
import com.itsaky.androidide.models.Range
import com.itsaky.androidide.preferences.internal.tabSize
import com.itsaky.androidide.projects.FileManager
import com.itsaky.androidide.projects.ProjectManagerImpl
import com.itsaky.androidide.projects.builder.BuildService
import com.itsaky.androidide.tooling.api.IProject
import com.itsaky.androidide.tooling.api.IToolingApiServer
import com.itsaky.androidide.tooling.api.messages.InitializeProjectParams
import com.itsaky.androidide.tooling.testing.ToolingApiTestLauncher
import com.itsaky.androidide.utils.Environment
import com.itsaky.androidide.utils.FileProvider
import com.itsaky.androidide.utils.ILogger
import io.github.rosemoe.sora.text.Content
import io.mockk.every
import io.mockk.mockkStatic
import kotlinx.coroutines.runBlocking
import org.greenrobot.eventbus.EventBus
import org.junit.Before
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
import java.io.File
import java.nio.file.Path
/**
* Runs tests for a language server.
*
* @author Akash Yadav
*/
@RunWith(RobolectricTestRunner::class)
@Config(manifest = Config.DEFAULT_VALUE_STRING)
abstract class LSPTest {
protected lateinit var toolingServer: IToolingApiServer
protected lateinit var toolingProject: IProject
var cursor: Int = -1
private val cursorText = "@@cursor@@"
var file: Path? = null
var contents: StringBuilder? = null
protected val log = ILogger.newInstance(javaClass.simpleName)
companion object {
@JvmStatic
protected var isInitialized: Boolean = false
}
@Before
open fun initProjectIfNeeded() {
if (isInitialized) {
return
}
mockkStatic(::tabSize)
every { tabSize } returns 4
val (server, project, result) =
ToolingApiTestLauncher()
.launchServer()
assertThat(result?.isSuccessful).isTrue()
this.toolingProject = project
this.toolingServer = server
Lookup.getDefault().update(BuildService.KEY_PROJECT_PROXY, project)
Environment.ANDROID_JAR = FileProvider.resources().resolve("android.jar").toFile()
Environment.JAVA_HOME = File(System.getProperty("java.home")!!)
registerServer()
val projectManager = ProjectManagerImpl.getInstance()
projectManager.register()
runBlocking { projectManager.setupProject(project) }
// We need to manually setup the language server with the project here
// ProjectManager.notifyProjectUpdate()
ILanguageServerRegistry.getDefault()
.getServer(getServerId())!!
.setupWithProject(projectManager.rootProject!!)
isInitialized = true
}
protected abstract fun registerServer()
protected abstract fun getServerId(): String
abstract fun test()
fun requireCursor(): Int {
this.cursor = contents!!.indexOf(cursorText)
assertThat(cursor).isGreaterThan(-1)
return cursor
}
fun deleteCursorText() {
contents!!.delete(this.cursor, this.cursor + cursorText.length)
assertThat(contents!!.indexOf(cursorText)).isEqualTo(-1)
// As the content has been changed, we have to
// Update the content in language server
dispatchEvent(
DocumentChangeEvent(
file!!,
contents.toString(),
contents.toString(),
1,
DELETE,
0,
Range.NONE
)
)
}
@JvmOverloads
fun cursorPosition(deleteCursorText: Boolean = true): Position {
requireCursor()
if (deleteCursorText) {
deleteCursorText()
}
val pos = Content(contents!!).indexer.getCharPosition(cursor)
return Position(pos.line, pos.column, pos.index)
}
open fun openFile(fileName: String) {
file = FileProvider.sourceFile(fileName).normalize()
contents = FileProvider.contents(file!!)
dispatchEvent(DocumentOpenEvent(file!!, contents.toString(), 0))
}
open fun dispatchEvent(event: Any) {
when (event) {
is DocumentOpenEvent -> FileManager.onDocumentOpen(event)
is DocumentChangeEvent -> FileManager.onDocumentContentChange(event)
is DocumentCloseEvent -> FileManager.onDocumentClose(event)
is FileRenameEvent -> FileManager.onFileRenamed(event)
is FileDeletionEvent -> FileManager.onFileDeleted(event)
}
EventBus.getDefault().post(event)
}
open fun createActionData(vararg values: Any): ActionData {
val data = ActionData()
data.put(Context::class.java, RuntimeEnvironment.getApplication())
for (value in values) {
if (value is Path) {
data.put(Path::class.java, value)
} else {
data.put(value::javaClass.get(), value)
}
}
return data
}
}
@@ -0,0 +1,35 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.lsp.api.util
import com.itsaky.androidide.utils.ILogger
import com.itsaky.androidide.utils.ILogger.Priority
/** @author Akash Yadav */
class ReflectiveLogListener(private val receiver: Class<out Any>) : ILogger.LogListener {
override fun log(priority: Priority, tag: String, message: String) {
val method =
receiver.getDeclaredMethod(
"log",
Priority::class.java,
String::class.java,
String::class.java
)
method.isAccessible = true
method.invoke(null, priority, tag, message)
}
}
+1
View File
@@ -0,0 +1 @@
/test-home
@@ -0,0 +1,2 @@
/build.gradle
build/
@@ -0,0 +1 @@
build/
@@ -0,0 +1,41 @@
plugins {
id 'com.android.library'
}
android {
namespace = "com.itsaky.android.library"
compileSdkVersion rootProject.ext.compileSdk
buildToolsVersion rootProject.ext.buildTools
defaultConfig {
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
lintOptions {
abortOnError false
}
}
dependencies {
implementation 'io.github.itsaky:nb-javac-android:17.0.0.0'
api project (path: ':java-library')
}
repositories {
mavenCentral ()
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,5 @@
package com.itsaky.androidide.tooling.test;
public class Main {
public static void main(String[] args) {}
}
@@ -0,0 +1 @@
build/
@@ -0,0 +1,41 @@
plugins {
id 'com.android.library'
}
android {
namespace = "com.itsaky.test.another.android.library"
compileSdkVersion rootProject.ext.compileSdk
buildToolsVersion rootProject.ext.buildTools
defaultConfig {
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
lintOptions {
abortOnError false
}
}
dependencies {
implementation 'io.github.itsaky:nb-javac-android:17.0.0.0'
implementation project (path: ':other-java-library')
}
repositories {
mavenCentral ()
}
@@ -0,0 +1,5 @@
package com.itsaky.androidide.tooling.test;
public class Main {
public static void main(String[] args) {}
}
@@ -0,0 +1 @@
build/
@@ -0,0 +1,16 @@
plugins {
id 'java-library'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
implementation 'io.github.itsaky:nb-javac-android:17.0.0.0'
}
repositories {
mavenCentral ()
}
@@ -0,0 +1,17 @@
plugins {
id 'java-library'
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
dependencies {
api 'io.github.itsaky:nb-javac-android:17.0.0.0'
api project(path: ':another-java-library')
}
repositories {
mavenCentral ()
}
@@ -0,0 +1,5 @@
package com.itsaky.androidide.tooling.test;
public class Main {
public static void main(String[] args) {}
}
@@ -0,0 +1,5 @@
package com.itsaky.androidide.tooling.test;
public class Main {
public static void main(String[] args) {}
}
@@ -0,0 +1 @@
build/
@@ -0,0 +1,73 @@
plugins {
id 'com.android.application'
}
android {
namespace = "com.itsaky.test.app"
compileSdkVersion rootProject.ext.compileSdk
buildToolsVersion rootProject.ext.buildTools
defaultConfig {
applicationId rootProject.ext.appId
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
lintOptions {
abortOnError false
}
buildFeatures {
viewBinding true
}
}
task thisIsATestTask () {
println "This is a test task"
}
dependencies {
implementation fileTree (dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.5.1'
// Issue #488
implementation 'com.unity3d.ads:unity-ads:4.4.0'
implementation 'com.google.android.gms:play-services-ads:21.2.0'
implementation platform('com.google.firebase:firebase-bom:30.5.0')
implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-firestore'
implementation 'com.google.android.gms:play-services-auth:20.3.0'
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-database'
implementation fileTree(dir: 'libs', include: ['*.aar'])
implementation 'com.google.android.gms:play-services-appset:16.0.2'
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
implementation 'com.google.android.gms:play-services-basement:18.1.0'
implementation 'com.google.firebase:firebase-inappmessaging-display'
implementation 'com.google.android.material:material:1.8.0-alpha01'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0'
implementation project (path: ':another-android-library')
implementation platform('com.google.firebase:firebase-bom:30.5.0')
@@UNRESOLVED_DEPENDENCY@@
}
+21
View File
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.in.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -0,0 +1,18 @@
package com.itsaky.test.app;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private String string;
private int integer;
private boolean condition;
private float imFloating;
private double profit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<arcMotion android:duration="@@cursor@@"/>
</transitionSet>
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
f@@cursor@@/>
</set>
@@ -0,0 +1,4 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/test_color"/>
<item android:color="@color/test_color_ref"/>
</selector>
@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="@@cursor@@">
</shape>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
sh@@cursor@@>
</shape>
@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
@@ -0,0 +1,6 @@
<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
te@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/ic_android"
android:scaleType="@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,6 @@
<AutoCompleteTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<CheckBox
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:padding="4@@cursor@@"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,6 @@
<EditText
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ripple"
android:clickable="true"
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:minHeight="35dp"
android:orientation="horizontal"
android:paddingStart="4dp"
android:paddingTop="4dp"
android:paddingEnd="4dp"
android:paddingBottom="4dp">
<@@cursor@@
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/ic_android"
android:scaleType="fitCenter"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:textColor="@color/primaryTextColor"
tools:text="Button" />
</LinearLayout>
@@ -0,0 +1,6 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<GestureOverlayView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<ProgressBar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<RadioButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<SeekBar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<Spinner
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<SurfaceView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<Switch
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_ripple"
android:clickable="true"
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:minHeight="35dp"
android:orientation="horizontal"
android:paddingStart="4dp"
android:paddingTop="4dp"
android:paddingEnd="4dp"
android:paddingBottom="4dp">
<Image@@cursor@@
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/ic_android"
android:scaleType="fitCenter"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:textColor="@color/primaryTextColor"
tools:text="Button" />
</LinearLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
material:layout_constraintStart_toStartOf="@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res/androidx.constraintlayout.widget"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
material:layout_constraintStart_toStartOf="@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@com.itsaky.test.app:string/ap@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@android:string/ap@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@com.@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@c@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@android:s@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:text="@string/ap@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
l@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
s@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:drawableStart="ic_@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:textColor="@@cursor@@"
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res/androidx.constraintlayout.widget"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
material:layout@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res/androidx.constraintlayout.widget"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
material:layout@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
layout@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<androidx.contraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res/androidx.constraintlayout.widget"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
layout@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</androidx.contraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:l@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:margin@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
padding@@cursor@@
android:padding="4dp"
android:layout_marginEnd="8dp"
android:layout_gravity="center_vertical"/>
</LinearLayout>
@@ -0,0 +1,6 @@
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<TextureView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<ToggleButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<View
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,6 @@
<WebView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/template_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/myText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Hello User!" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello User!"
android:textColor="@color/colorPrimary"
android:textStyle="bold" />
</LinearLayout>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/included_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_include" android:layout_width="48dp" android:layout_height="48dp"/>
</LinearLayout>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/included_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<include layout="@layout/layout_include" android:layout_width="48dp" android:layout_height="48dp"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:id="@+id/inlined_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<aapt:attr name="android:background">
<shape android:id="@+id/my_shape">
<solid android:color="#f44336"/>
</shape>
</aapt:attr>
</LinearLayout>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/included_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<include layout="@layout/layout_merge"/>
</RelativeLayout>
@@ -0,0 +1,31 @@
<!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/included_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="This is an included layout"/>
<TextView
android:id="@+id/included_text_other"
android:layout_below="@id/included_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="This is an included layout"/>
</merge>
@@ -0,0 +1,25 @@
<!--
~ 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 <https://www.gnu.org/licenses/>.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/merge_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_merge" android:clickable="false"/>
</LinearLayout>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/single_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.itsaky.androidide.inflater.unsupported.UnsupportedView
android:id="@+id/myView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
<com.itsaky.androidide.inflater.unsupported.UnsupportedLayout
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.itsaky.androidide.inflater.unsupported.UnsupportedLayout
android:id="@+id/myLayout_withSupportedChildren"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ImageView
android:id="@+id/image_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</com.itsaky.androidide.inflater.unsupported.UnsupportedLayout>
<com.itsaky.androidide.inflater.unsupported.UnsupportedLayout
android:id="@+id/myLayout_withUnsupportedChildren"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.itsaky.androidide.inflater.unsupported.UnsupportedView
android:id="@+id/image_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<com.itsaky.androidide.inflater.unsupported.UnsupportedView
android:id="@+id/image_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</com.itsaky.androidide.inflater.unsupported.UnsupportedLayout>
</LinearLayout>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Some files were not shown because too many files have changed in this diff Show More