Skip to content
This repository was archived by the owner on Jun 11, 2026. It is now read-only.

Commit e387192

Browse files
parkerschroederKristen Halperkhalp
authored
Hero notes (#36)
* Copied list detail framework Copied framework from list/detail sample * Refaactor package and app name * Update launcher icon * Add light/dark themes * Update dark theme colors * Added variable width drawing and erasing Now supports constant pressure feedback and erasing * Fixed finger drawing Fixed an issue with the stroke instantiation when using finger to draw * linting newlines newlines newlines * Fix toolbar and add floating action button * Added basic saving saved files do not persist yet * Improved serialization for drawings drawings can now be saved and redrawn * Added auto saving and loading any drawing changes are saved and loaded on fragment lifetime changes * Linting Passes ktlint, still has some lint issues that may be better for you to fix * Note addition Create Note model and connect floating action button to the addition of notes to the list * Modify note fragment to have modes * Connect note model to UI * Worked on file persistence notes are associated with unique items in a list * Very basic startup loading List fragment reads some metadata and loads appropriate notes * Improved single tab note saving Added coordination between notes and directory entries by implementing inodes * Fixed formatting Renamed some files and methods to account for the addition of inodes * Simplified INode set default values for inode * Remove unused sample files Any movie-related fragments/layouts * Refactor file names * Update icon * Extract current toolbars to separate xml files * Add navigation and actions to note fragment toolbar * Add primary and contextual toolbars to note list fragment * Linting * Refactor NoteFragment to NoteDetailFragment * Convert property to getter * added deletion implemented backend code for deleting files * hooked up deletion to front end can perform deletion on list and detail fragments * linting fixed formatting issues * Add getting started screen for first span * Implement fragment behavior after spanning changes * Address PR feedback * started categories backend changing DataProvider structure to support categories * Category switching can now switch between categories * Category options added categories can be renamed, added, and deleted * Resolved bugs with persistence * linting * Code cleanup * Add pen mode to toolbar * Modify selection mode code Fix icon color issue and clean up methods * Linting * Cleanup * fixed despan deletion bug * updated dependencies * Add twonote to CI process * Small UI fixes * Add pen tools buttons * Add unlimited pen colors * Remove unused code * Show custom color * Linting caught by our functioning CI * Working drag and drop fixed permission issues with reading files and imported code from source editor * Fixed drag and drop permissions can now import generic txt file from any app * fullscreen drag and drop txt file can be dragged on any part of the screen * Share note as image * Code cleanup * Fix custom color crash When empty string was entered, the parseColor threw a different kind of exception * Add more comments * Add extended view when rotated/spanned * Reorganize updateINode method * Update MainActivity to use fragment handler * Linting * Fix fragment switching/logic * Fix category switching bug * xml file code clean up! Adding copyright (because I always forget to add them) and removing unused attributes * Added image drop target * Image repositioning Image movement within app * Image resizing and repositioning drag image on long click, resize with pinch * Added picture mode to toolbar can switch between picture, ink, and text modes * Switched toolbar icons The three modes have their own dedicated menu items now * Make newer strokes appear on top * Resize drawings when rotated to extended view * Update pen tools menu with highlight and new icons * Fix rotation bugs * Move constants to Defines * Add eraser and refine pen tools * Linting * saving rough draft * Image saving images are converted to bitmap strings and saved in the respective note * cleanup * extra comments * Window switch switch to appropriate window on drag event * Fix linting issue * Remove unimplemented menu items * Add rotation handling to images * Implement image deletion * Fix rotation and deletion bugs * Address PR comments * Update TwoNote readme * Update existing readmes for consistency * Update drag-drop link * Update readme * Updated references * wip * Uncapitalize app pattern names * Reorganize feature list * Add screenshots to readme * Add categories/highlight screenshot * Address PR comments * removed unnecessary viewmodel DrawViewModel was not critical to code * reformatted handlers * fixed merge artifacts * removed unnecessary viewmodel DrawViewModel was not critical to code * reformatted handlers * resolved duplicates on merge * cleaned up fragment focused code * Cleaned up code related to pen * cleaned up general app code * removed default note names * fixed issues with text newlines * Reorganize folder structure * Add copyright to source files * Clean up xml files * Clean up NoteDetailFragment Reorganize methods, add comments, remove unused attributes * Clean up MainActivity * Clean up gradle files * Clean up handlers * Start NoteListFragment commenting * added method headers for utils/fragments * Added comments for models * Additional code cleanup * Added file headers * fixed merge issues * linting * Update readme for samples browser compatibility Co-authored-by: Kristen Halper <t-krhalp@microsoft.com> Co-authored-by: Kristen Halper <khalp@vt.edu>
1 parent e66a3b9 commit e387192

101 files changed

Lines changed: 5039 additions & 64 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/app-samples-CI.yml

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ name: App samples CI
55

66
on:
77
push:
8-
branches: [ main, hero_notes, add-ci ]
8+
branches: [ main, hero_notes ]
99
pull_request:
1010
branches: [ main, hero_notes ]
1111
workflow_dispatch:
@@ -109,4 +109,33 @@ jobs:
109109
run: |
110110
cd Widget
111111
./gradlew ktlint
112+
- name: Cache TwoNote Gradle packages
113+
uses: actions/cache@v2
114+
with:
115+
path: TwoNote/.gradle/caches
116+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
117+
restore-keys: ${{ runner.os }}-gradle
118+
- name: Grant execute permission for TwoNote gradlew
119+
run: chmod +x TwoNote/gradlew
120+
- name: clean TwoNote
121+
run: |
122+
cd TwoNote
123+
./gradlew clean
124+
- name: assemble debug TwoNote
125+
run: |
126+
cd TwoNote
127+
./gradlew assembleDebug
128+
- name: unit tests TwoNote
129+
run: |
130+
cd TwoNote
131+
./gradlew testDebugUnitTest
132+
- name: lint TwoNote
133+
run: |
134+
cd TwoNote
135+
./gradlew lintDebug
136+
- name: ktlint TwoNote
137+
run: |
138+
cd TwoNote
139+
./gradlew ktlint
140+
112141

PhotoEditor/README.md

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,49 @@
11
---
22
page_type: sample
33
name: "Surface Duo - PhotoEditor"
4-
description: "Uses the Companion Pane dual-screen pattern and drag/drop features in a photo editing app for the Surface Duo."
4+
description: "Uses the companion pane dual-screen pattern and drag and drop features in a photo editing app for the Surface Duo."
55
languages:
66
- kotlin
77
products:
88
- surface-duo
99
urlFragment: photo-editor
1010
---
1111

12-
# Photo Editor
12+
# PhotoEditor
1313

1414
This Kotlin application implements a simple photo editor that lets users select, edit, and save images. Screenshots of the application and its behavior are available [here](screenshots/).
1515

16-
## Prerequisites
16+
## Getting Started
1717

18-
* Android Studio
19-
* Surface Duo emulator
18+
To learn how to load apps on the Surface Duo emulator, see the [documentation](https://docs.microsoft.com/dual-screen/android), and follow [the blog](https://devblogs.microsoft.com/surface-duo).
2019

21-
This application also uses a beta release of the [Constraint Layout](https://developer.android.com/jetpack/androidx/releases/constraintlayout) package to facilitate image editing with the ImageFilterView class, and all button icons were downloaded from the [Android Material Design](https://material.io/resources/icons/?style=baseline) website.
22-
23-
## Running the sample
24-
25-
* Start Android Studio.
26-
* Open the PhotoEditor project: **File > Open**, navigate to file location of the the **PhotoEditor** folder, then click **OK**.
27-
* Build your project: **Build > Make Project** or **Ctrl+F9**
28-
* Start the Surface Duo emulator
29-
* Select **"Microsoft SurfaceDuoEmulator API 29"** or **"Virtual Device"** from the list of Running Devices.
30-
* Run the project on the emulator: **Run > Run 'app'**, **Ctrl+F2**, or click the green play button.
31-
32-
## Key concepts
20+
> [!NOTE]
21+
> This application uses a beta release of the [Constraint Layout library](https://developer.android.com/jetpack/androidx/releases/constraintlayout) to facilitate image editing with the [ImageFilterView](https://developer.android.com/reference/androidx/constraintlayout/utils/widget/ImageFilterView) class.
3322
34-
### App features
23+
## Features
3524

36-
* Select: click on current image to open photo gallery or drag and drop image file
37-
* Edit: click on buttons and adjust sliders to modify image properties
38-
- Buttons: rotate left and right
39-
- Sliders: saturation, brightness, warmth
40-
* Save: click save button to download edited image to device (see below)
25+
This app supports three main actions: selection, editing, and saving. To select a photo, click on the current image to open the device's photo gallery. To modify image properties, use the buttons and sliders. Finally, to save the changes in a new photo, click the save button.
4126

4227
![PhotoEditor app on left screen with edited image and photo gallery on right screen displaying the same edited image after it was saved](screenshots/save_feature.png)
4328

4429
### Companion Pane
4530

46-
This sample shows how the [Companion Pane](https://docs.microsoft.com/dual-screen/introduction#companion-pane) dual-screen app pattern can be used to make more tools and controls available to users when the app is spanned. When in single-screen mode, the app only shows users three controls: the slider, the rotation buttons, and the save button. In order to modify all possible properties with the slider, the user must interact with the dropdown menu. This ensures that the chosen image is large enough on the screen to inspect any edits.
31+
This sample shows how the [companion pane](https://docs.microsoft.com/dual-screen/introduction#companion-pane) dual-screen app pattern can be used to make more tools and controls available to users when the app is spanned. When in single-screen mode, the app only shows users three controls: the slider, the rotation buttons, and the save button. In order to modify all possible properties with the slider, the user must interact with the dropdown menu. This ensures that the chosen image is large enough on the screen to inspect any edits.
4732

4833
When switched to dual-screen mode, however, the entire left screen can be dedicated to image display. This frees up the right screen to display more editing controls. As a result, a dropdown menu is no longer needed and all three slider controls can be displayed.
4934

50-
### Drag and drop
35+
### Drag and Drop
36+
37+
This sample also demonstrates how drag and drop features can simplify file transfer across screens and between applications. Instead of clicking to open the photo gallery and select a new photo, users can simply drag the desired image file into the app and drop it over the currently displayed image, as shown below. For more information, check out this [drag and drop sample](https://github.com/microsoft/surface-duo-sdk-samples-kotlin/tree/master/DragAndDrop).
5138

52-
This sample also demonstrates how drag and drop features can simplify file transfer across screens and between applications. For more information on drag and drop, check out [this sample](https://github.com/microsoft/surface-duo-sdk-samples-kotlin/tree/master/draganddrop).
39+
![Drag and drop example between Files app and PhotoEditor](screenshots/drag_drop_import.png)
5340

54-
### Dual screen layout
41+
### Dual-screen Layout
5542

56-
The SurfaceDuoLayout element of the [DualScreen-Layout](https://docs.microsoft.com/dual-screen/android/api-reference/dualscreen-layout?tabs=java) package is the key to developing applications on the Surface Duo. This layout provides different attributes for single-screen and dual-screen views, and example usage can be seen in [activity_main.xml](app/src/main/res/layout/activity_main.xml).
43+
The SurfaceDuoLayout element of the [dual-screen layout](https://docs.microsoft.com/dual-screen/android/api-reference/dualscreen-library/) package is the key to developing applications on the Surface Duo. This layout provides different attributes for single-screen and dual-screen views, and example usage can be seen in [activity_main.xml](app/src/main/res/layout/activity_main.xml).
5744

5845
> [!NOTE]
59-
> When defining landscape and portrait orientations for the dual-screen view, the two screens are treated as one. That means the dual-screen landscape orientation is when the single-screen orientation would be considered portrait (shown below) and vice versa. For more tips, check out [this blog post](https://devblogs.microsoft.com/surface-duo/introducing-dual-screen-layouts-android/).
46+
> When defining landscape and portrait xml resources in Android Studio for the dual-screen view, the two screens are treated as one. That means the dual-screen landscape orientation is when the single-screen orientation would be considered portrait (shown below) and vice versa. For more tips, check out [this blog post](https://devblogs.microsoft.com/surface-duo/introducing-dual-screen-layouts-android/).
6047
6148
![Dual-screen landscape view](screenshots/dual_screen_landscape.png)
6249

@@ -73,3 +60,15 @@ provided by the bot. You will only need to do this once across all repos using o
7360
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
7461
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
7562
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
63+
64+
## License
65+
66+
Copyright (c) Microsoft Corporation.
67+
68+
MIT License
69+
70+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
71+
72+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
73+
74+
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

PhotoEditor/app/src/main/java/com/microsoft/device/display/samples/photoeditor/MainActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.microsoft.device.display.samples.photoeditor
88

9+
import android.app.Activity
910
import android.content.ClipData
1011
import android.content.ContentResolver
1112
import android.content.ContentValues
@@ -94,7 +95,7 @@ class MainActivity : AppCompatActivity() {
9495
super.onActivityResult(requestCode, resultCode, data)
9596

9697
// Select image to edit from photo gallery
97-
if (requestCode == SELECT_IMAGE && data?.data != null) {
98+
if (requestCode == SELECT_IMAGE && resultCode == Activity.RESULT_OK && data?.data != null) {
9899
val uri: Uri = data.data!!
99100
val image = findViewById<ImageFilterView>(R.id.image)
100101
image.setImageBitmap(BitmapFactory.decodeStream(contentResolver.openInputStream(uri)))

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,24 @@ This repo contains sample Android applications for Microsoft Surface Duo.
88

99
To learn how to load apps on the Surface Duo emulator, see the [documentation](https://docs.microsoft.com/dual-screen/android), and follow [the blog](https://devblogs.microsoft.com/surface-duo).
1010

11+
## Contents
12+
13+
### [PhotoEditor](https://github.com/microsoft/surface-duo-app-samples/tree/main/PhotoEditor)
14+
15+
Includes examples of the [companion pane](https://docs.microsoft.com/dual-screen/introduction#dual-view) app pattern, drag and drop import for images, and [UI testing](https://docs.microsoft.com/dual-screen/android/espresso-ui-tests).
16+
17+
### [SourceEditor](https://github.com/microsoft/surface-duo-app-samples/tree/main/SourceEditor)
18+
19+
Includes examples of the [dual view](https://docs.microsoft.com/dual-screen/introduction#dual-view) app pattern, drag and drop import for text, and [UI testing](https://docs.microsoft.com/dual-screen/android/espresso-ui-tests).
20+
21+
### [TwoNote](https://github.com/microsoft/surface-duo-app-samples/tree/main/TwoNote)
22+
23+
Includes examples of the [list-detail](https://docs.microsoft.com/dual-screen/introduction#master-detail) and [extended canvas](https://docs.microsoft.com/dual-screen/introduction#extended-canvas) app patterns, drag and drop import for text and images, and pen events.
24+
25+
### [Widget](https://github.com/microsoft/surface-duo-app-samples/tree/main/Widget)
26+
27+
Includes example of how to create widgets that display RSS feed data.
28+
1129
## Related links
1230

1331
- [SDK samples (Java)](https://github.com/microsoft/surface-duo-sdk-samples)
@@ -31,3 +49,15 @@ provided by the bot. You will only need to do this once across all repos using o
3149
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
3250
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
3351
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
52+
53+
## License
54+
55+
Copyright (c) Microsoft Corporation.
56+
57+
MIT License
58+
59+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
60+
61+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
62+
63+
THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

SourceEditor/README.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
---
22
page_type: sample
33
name: "Surface Duo - SourceEditor"
4-
description: "Uses the Dual View layout pattern and external storage capabilities to create a source-editing app for the Surface Duo."
4+
description: "Uses the dual view layout pattern and external storage capabilities to create a source-editing app for the Surface Duo."
55
languages:
66
- kotlin
77
products:
88
- surface-duo
99
urlFragment: source-editor
1010
---
1111

12-
# Introduction
12+
# SourceEditor
1313

14-
This sample contains a Kotlin application designed for Surface Duo. The application is an HTML
15-
editor that enables real-time rendering of formatted source code. Making use of the
16-
[Dual View](https://docs.microsoft.com/dual-screen/introduction#dual-view)
17-
app pattern, users are able to edit and preview any changes simultaneously without switching
18-
windows.
14+
This sample contains a Kotlin application designed for Surface Duo. The application is an HTML editor that enables real-time rendering of formatted source code. Making use of the [dual view](https://docs.microsoft.com/dual-screen/introduction#dual-view) app pattern, users are able to edit and preview any changes simultaneously without switching windows.
1915

2016
## Getting Started
2117

22-
To learn how to load your app on to emulator, and to use it, see the full documentation here: [https://docs.microsoft.com/dual-screen](https://docs.microsoft.com/dual-screen)
18+
To learn how to load apps on the Surface Duo emulator, see the [documentation](https://docs.microsoft.com/dual-screen/android), and follow [the blog](https://devblogs.microsoft.com/surface-duo).
2319

2420
## Features
2521

SourceEditor/app/src/main/java/com/microsoft/device/display/samples/sourceeditor/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class MainActivity : AppCompatActivity() {
6060
// request to load file contents has been made, process the file's contents
6161
else if (requestCode == FileHandler.PICK_TXT_FILE && resultCode == Activity.RESULT_OK) {
6262
resultData?.data?.also { uri ->
63-
fileHandler.processFileData(uri)
63+
fileHandler.processFileData(uri, null)
6464
}
6565
}
6666
}

SourceEditor/app/src/main/java/com/microsoft/device/display/samples/sourceeditor/includes/DragHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ class DragHandler(activity: Activity, webVM: WebViewModel, contentResolver: Cont
4444
private fun handleTextDrop(event: DragEvent) {
4545
val item = event.clipData.getItemAt(0)
4646
val uri = item.uri
47-
fileHandler.processFileData(uri)
47+
fileHandler.processFileData(uri, event)
4848
}
4949
}

SourceEditor/app/src/main/java/com/microsoft/device/display/samples/sourceeditor/includes/FileHandler.kt

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import android.content.ContentResolver
1212
import android.content.Intent
1313
import android.net.Uri
1414
import android.provider.DocumentsContract
15+
import android.view.DragEvent
16+
import androidx.core.app.ActivityCompat
1517
import androidx.core.app.ActivityCompat.startActivityForResult
1618
import com.microsoft.device.display.samples.sourceeditor.viewmodel.WebViewModel
1719
import java.io.BufferedReader
@@ -27,7 +29,6 @@ class FileHandler(
2729
private val webVM: WebViewModel,
2830
private val contentResolver: ContentResolver
2931
) {
30-
3132
companion object {
3233
// intent request codes
3334
const val CREATE_FILE = 1
@@ -62,18 +63,21 @@ class FileHandler(
6263

6364
// read text from file specified in uri path
6465
@Throws(IOException::class)
65-
private fun readTextFromUri(uri: Uri): String {
66+
fun processFileData(uri: Uri, event: DragEvent?) {
6667
val stringBuilder = StringBuilder()
68+
69+
event?.let { ActivityCompat.requestDragAndDropPermissions(activity, event) }
6770
contentResolver.openInputStream(uri)?.use { inputStream ->
6871
BufferedReader(InputStreamReader(inputStream)).use { reader ->
6972
var line: String? = reader.readLine()
7073
while (line != null) {
7174
stringBuilder.append(line)
75+
stringBuilder.append(System.getProperty("line.separator"))
7276
line = reader.readLine()
7377
}
7478
}
7579
}
76-
return stringBuilder.toString()
80+
return webVM.setText(stringBuilder.toString())
7781
}
7882

7983
// overwrite text from file specified in uri path
@@ -94,23 +98,4 @@ class FileHandler(
9498
e.printStackTrace()
9599
}
96100
}
97-
98-
// format text for readability (newline chars are dropped in saving/grabbing process)
99-
fun processFileData(uri: Uri) {
100-
val str: String = readTextFromUri(uri)
101-
102-
val builder = StringBuilder()
103-
var initHeader = true
104-
105-
val lines = str.split("<")
106-
lines.forEach {
107-
if (initHeader) {
108-
builder.append(it)
109-
initHeader = false
110-
} else {
111-
builder.append("<" + it + System.getProperty("line.separator"))
112-
}
113-
}
114-
webVM.setText(builder.toString())
115-
}
116101
}

TwoNote/.editorconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[*.{kt, kts}]
2+
#---- Ktlint rules ----
3+
# Comma-separated list of rules to disable (Since 0.34.0)
4+
# Note that rules in any ruleset other than the standard ruleset will need to be prefixed
5+
# by the ruleset identifier.
6+
disabled_rules = final-newline

TwoNote/.gitignore

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
### Android template
2+
# Built application files
3+
*.apk
4+
*.ap_
5+
*.aab
6+
7+
# Files for the ART/Dalvik VM
8+
*.dex
9+
10+
# Java class files
11+
*.class
12+
13+
# Generated files
14+
bin/
15+
gen/
16+
out/
17+
release/
18+
19+
# Gradle files
20+
.gradle/
21+
build/
22+
23+
# Local configuration file (sdk path, etc)
24+
local.properties
25+
26+
# Proguard folder generated by Eclipse
27+
proguard/
28+
29+
# Log Files
30+
*.log
31+
32+
# Android Studio Navigation editor temp files
33+
.navigation/
34+
35+
# Android Studio captures folder
36+
captures/
37+
38+
# IntelliJ
39+
*.iml
40+
.idea/
41+
42+
# Keystore files
43+
# Uncomment the following lines if you do not want to check your keystore files in.
44+
#*.jks
45+
#*.keystore

0 commit comments

Comments
 (0)