diff --git a/AppSearchSample/app/build.gradle b/AppSearchSample/app/build.gradle index dcab3ee..db3875a 100644 --- a/AppSearchSample/app/build.gradle +++ b/AppSearchSample/app/build.gradle @@ -16,22 +16,23 @@ plugins { id 'com.android.application' - id 'kotlin-android' - id 'kotlin-kapt' + id 'org.jetbrains.kotlin.android' } +apply plugin: 'kotlin-kapt' + android { - namespace 'com.android.example.appsearchsample' - compileSdkVersion 31 - buildToolsVersion "30.0.3" + namespace "com.android.example.appsearchsample" + compileSdk 33 defaultConfig { applicationId "com.android.example.appsearchsample" - minSdkVersion 14 - targetSdkVersion 31 + minSdk 33 + targetSdk 33 versionCode 1 versionName "1.0" - multiDexEnabled = true + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -41,11 +42,11 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = '17' } buildFeatures { viewBinding true @@ -53,23 +54,21 @@ android { } dependencies { - def appsearch_version = "1.0.0-alpha03" + kapt 'androidx.appsearch:appsearch-compiler:1.1.0-alpha03' - // AppSearch dependencies - implementation "androidx.appsearch:appsearch:$appsearch_version" - implementation "androidx.appsearch:appsearch-local-storage:$appsearch_version" - implementation "androidx.appsearch:appsearch-platform-storage:$appsearch_version" - kapt "androidx.appsearch:appsearch-compiler:$appsearch_version" + //api 'androidx.annotation:annotation:1.6.0' + implementation 'androidx.appsearch:appsearch:1.1.0-alpha03' + implementation 'androidx.appsearch:appsearch-local-storage:1.1.0-alpha03' + implementation 'androidx.appsearch:appsearch-platform-storage:1.1.0-alpha03' - implementation 'androidx.activity:activity-ktx:1.3.1' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.core:core-ktx:1.8.0' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.concurrent:concurrent-futures-ktx:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' - implementation 'androidx.core:core-ktx:1.6.0' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'com.google.android.material:material:1.4.0' - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.navigation:navigation-fragment-ktx:2.5.2' + implementation 'androidx.navigation:navigation-ui-ktx:2.5.2' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/MainActivity.kt b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/MainActivity.kt index b9e628b..9ae17d5 100644 --- a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/MainActivity.kt +++ b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/MainActivity.kt @@ -135,11 +135,14 @@ class MainActivity : AppCompatActivity() { val addNoteDialogView = dialog as AlertDialog val noteEditText = addNoteDialogView.findViewById(R.id.add_note_text) as EditText? + val noteEditTitle = + addNoteDialogView.findViewById(R.id.add_note_title) as EditText? val noteText = noteEditText?.text.toString() + val noteTitle = noteEditTitle?.text.toString() progressSpinner.visibility = View.VISIBLE noNotesMessage.visibility = View.GONE notesList.visibility = View.GONE - noteViewModel.addNote(noteText) + noteViewModel.addNote(noteText, noteTitle) } .setNegativeButton(R.string.add_note_dialog_cancel) { dialog, _ -> dialog.cancel() diff --git a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/NoteListItemAdapter.kt b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/NoteListItemAdapter.kt index dab6ecd..e83d51a 100644 --- a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/NoteListItemAdapter.kt +++ b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/NoteListItemAdapter.kt @@ -54,6 +54,7 @@ class NoteListItemAdapter(private val onDelete: (SearchResult?) -> Unit) : view: View, ) : RecyclerView.ViewHolder(view) { val noteTextView: TextView = view.findViewById(R.id.note_text) + val noteTitleView: TextView = view.findViewById(R.id.note_title) val noteDeleteButtonView: Button = view.findViewById(R.id.note_delete_button) fun bind(searchResult: SearchResult, onDelete: (SearchResult?) -> Unit) { @@ -69,6 +70,7 @@ class NoteListItemAdapter(private val onDelete: (SearchResult?) -> Unit) : } noteTextView.text = stringBuilder + noteTitleView.text = note.title noteDeleteButtonView.setOnClickListener { onDelete(searchResult) } } diff --git a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/Note.kt b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/Note.kt index fb548db..d092395 100644 --- a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/Note.kt +++ b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/Note.kt @@ -41,5 +41,11 @@ data class Note( @Document.StringProperty( indexingType = AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES ) - val text: String + val text: String, + + /** Field for a note title that that user inputs */ + @Document.StringProperty( + indexingType = AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES + ) + val title: String ) diff --git a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/NoteViewModel.kt b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/NoteViewModel.kt index f0ba602..0f2c70a 100644 --- a/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/NoteViewModel.kt +++ b/AppSearchSample/app/src/main/java/com/android/example/appsearchsample/model/NoteViewModel.kt @@ -53,13 +53,13 @@ class NoteViewModel(application: Application) : AndroidViewModel(application) { * * @param text text to create [Note] document for. */ - fun addNote(text: String) { + fun addNote(text: String, title: String) { val id = UUID.randomUUID().toString() - val note = Note(id = id, text = text) + val note = Note(id = id, text = text, title = title) viewModelScope.launch { val result = noteAppSearchManager.addNote(note) if (!result.isSuccess) { - _errorMessageLiveData.postValue("Failed to add note with id: $id and text: $text") + _errorMessageLiveData.postValue("Failed to add note with id: $id, text: $text, and title: $title") } queryNotes() diff --git a/AppSearchSample/app/src/main/res/layout/add_note_dialog.xml b/AppSearchSample/app/src/main/res/layout/add_note_dialog.xml index 542af53..7f828d3 100644 --- a/AppSearchSample/app/src/main/res/layout/add_note_dialog.xml +++ b/AppSearchSample/app/src/main/res/layout/add_note_dialog.xml @@ -21,10 +21,21 @@ android:layout_height="match_parent" android:padding="6dp"> + + - + app:layout_constraintBottom_toBottomOf="parent"> + + + + + + + app:layout_constraintStart_toEndOf="@+id/title_container" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> diff --git a/AppSearchSample/app/src/main/res/values/strings.xml b/AppSearchSample/app/src/main/res/values/strings.xml index 9eb9698..cb1bc25 100644 --- a/AppSearchSample/app/src/main/res/values/strings.xml +++ b/AppSearchSample/app/src/main/res/values/strings.xml @@ -19,6 +19,7 @@ No notes found! Start by adding a note. Search Notes Enter search text + Enter note title Enter note text Add Note Add a new note diff --git a/AppSearchSample/build.gradle b/AppSearchSample/build.gradle index 5eea1bf..fec9cb5 100644 --- a/AppSearchSample/build.gradle +++ b/AppSearchSample/build.gradle @@ -15,25 +15,8 @@ */ // Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - ext.kotlin_version = "1.5.10" - repositories { - google() - mavenCentral() - } - dependencies { - classpath "com.android.tools.build:gradle:4.2.1" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -task clean (type: Delete) { - delete rootProject.buildDir -} +plugins { + id 'com.android.application' version '8.0.2' apply false + id 'com.android.library' version '8.0.2' apply false + id 'org.jetbrains.kotlin.android' version '1.8.20' apply false +} \ No newline at end of file diff --git a/AppSearchSample/gradle.properties b/AppSearchSample/gradle.properties index f20a521..3c5031e 100644 --- a/AppSearchSample/gradle.properties +++ b/AppSearchSample/gradle.properties @@ -12,8 +12,12 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app"s APK +# Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/AppSearchSample/gradle/wrapper/gradle-wrapper.jar b/AppSearchSample/gradle/wrapper/gradle-wrapper.jar index f6b961f..e708b1c 100644 Binary files a/AppSearchSample/gradle/wrapper/gradle-wrapper.jar and b/AppSearchSample/gradle/wrapper/gradle-wrapper.jar differ diff --git a/AppSearchSample/gradle/wrapper/gradle-wrapper.properties b/AppSearchSample/gradle/wrapper/gradle-wrapper.properties index 3e297a6..6d9c52d 100644 --- a/AppSearchSample/gradle/wrapper/gradle-wrapper.properties +++ b/AppSearchSample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Jun 29 07:46:11 PDT 2021 +#Tue Jun 27 13:07:45 PDT 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/AppSearchSample/gradlew b/AppSearchSample/gradlew index cccdd3d..8b35b5b 100755 --- a/AppSearchSample/gradlew +++ b/AppSearchSample/gradlew @@ -28,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +66,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +110,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +140,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +161,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/AppSearchSample/gradlew.bat b/AppSearchSample/gradlew.bat index e95643d..6b3da4b 100644 --- a/AppSearchSample/gradlew.bat +++ b/AppSearchSample/gradlew.bat @@ -13,15 +13,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +38,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +48,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/AppSearchSample/settings.gradle b/AppSearchSample/settings.gradle index bb80ea7..e8db6e3 100644 --- a/AppSearchSample/settings.gradle +++ b/AppSearchSample/settings.gradle @@ -13,6 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} rootProject.name = "AppSearchSample" include ':app'