From a446d42c726ed73625d9fdbaacfc44a4df449abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20P=2E=20Fernandes?= Date: Wed, 6 Oct 2021 11:34:32 +0200 Subject: [PATCH 1/2] deprecate app indexing --- app-indexing/README.md | 45 +--- app-indexing/app/.gitignore | 1 - app-indexing/app/build.gradle | 47 ---- app-indexing/app/proguard-rules.pro | 20 -- .../appindexing/MainActivityTest.java | 55 ----- .../appindexing/kotlin/MainActivityTest.kt | 34 --- app-indexing/app/src/main/AndroidManifest.xml | 119 ----------- .../appindexing/EntryChoiceActivity.kt | 22 -- .../appindexing/java/AppIndexingService.java | 33 --- .../appindexing/java/AppIndexingUtil.java | 201 ------------------ .../appindexing/java/MainActivity.java | 165 -------------- .../appindexing/java/StickerProvider.java | 124 ----------- .../appindexing/kotlin/AppIndexingService.kt | 12 -- .../appindexing/kotlin/AppIndexingUtil.kt | 171 --------------- .../appindexing/kotlin/MainActivity.kt | 121 ----------- .../appindexing/kotlin/StickerProvider.kt | 114 ---------- .../res/drawable-hdpi/firebase_lockup_400.png | Bin 8076 -> 0 bytes .../res/drawable-mdpi/firebase_lockup_400.png | Bin 4689 -> 0 bytes .../drawable-xhdpi/firebase_lockup_400.png | Bin 9439 -> 0 bytes .../drawable-xxhdpi/firebase_lockup_400.png | Bin 18887 -> 0 bytes .../main/res/drawable-xxxhdpi/watermark.png | Bin 8301 -> 0 bytes .../app/src/main/res/layout/activity_main.xml | 70 ------ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3524 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2134 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4439 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7310 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 10436 -> 0 bytes .../app/src/main/res/values/colors.xml | 6 - .../app/src/main/res/values/strings.xml | 8 - .../app/src/main/res/values/styles.xml | 10 - app-indexing/app/src/screen.png | Bin 82034 -> 0 bytes app-indexing/build.gradle | 23 -- app-indexing/gradle.properties | 17 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - app-indexing/gradlew | 188 ---------------- app-indexing/gradlew.bat | 100 --------- app-indexing/settings.gradle | 10 - 38 files changed, 2 insertions(+), 1719 deletions(-) delete mode 100644 app-indexing/app/.gitignore delete mode 100644 app-indexing/app/build.gradle delete mode 100644 app-indexing/app/proguard-rules.pro delete mode 100644 app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/MainActivityTest.java delete mode 100644 app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/kotlin/MainActivityTest.kt delete mode 100644 app-indexing/app/src/main/AndroidManifest.xml delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/EntryChoiceActivity.kt delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingService.java delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingUtil.java delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/MainActivity.java delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/StickerProvider.java delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingService.kt delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingUtil.kt delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/MainActivity.kt delete mode 100644 app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/StickerProvider.kt delete mode 100644 app-indexing/app/src/main/res/drawable-hdpi/firebase_lockup_400.png delete mode 100644 app-indexing/app/src/main/res/drawable-mdpi/firebase_lockup_400.png delete mode 100644 app-indexing/app/src/main/res/drawable-xhdpi/firebase_lockup_400.png delete mode 100644 app-indexing/app/src/main/res/drawable-xxhdpi/firebase_lockup_400.png delete mode 100644 app-indexing/app/src/main/res/drawable-xxxhdpi/watermark.png delete mode 100644 app-indexing/app/src/main/res/layout/activity_main.xml delete mode 100644 app-indexing/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 app-indexing/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 app-indexing/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 app-indexing/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 app-indexing/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 app-indexing/app/src/main/res/values/colors.xml delete mode 100644 app-indexing/app/src/main/res/values/strings.xml delete mode 100644 app-indexing/app/src/main/res/values/styles.xml delete mode 100644 app-indexing/app/src/screen.png delete mode 100644 app-indexing/build.gradle delete mode 100644 app-indexing/gradle.properties delete mode 100644 app-indexing/gradle/wrapper/gradle-wrapper.jar delete mode 100644 app-indexing/gradle/wrapper/gradle-wrapper.properties delete mode 100755 app-indexing/gradlew delete mode 100644 app-indexing/gradlew.bat delete mode 100644 app-indexing/settings.gradle diff --git a/app-indexing/README.md b/app-indexing/README.md index 5369d50eda..c9f3ace475 100644 --- a/app-indexing/README.md +++ b/app-indexing/README.md @@ -1,48 +1,7 @@ Firebase App Indexing Quickstart ============================== -The Firebase App Indexing Android quickstart demonstrates how to get your app to be found in Google Search. +Firebase App Indexing is no longer the recommended way of indexing content for display as suggested results in Google Search App. -Introduction ------------- +Please check the [App Indexing Documentation](https://firebase.google.com/docs/app-indexing) for more details. -- [Read more about Firebase App Indexing](https://firebase.google.com/docs/app-indexing/) - -Getting Started ---------------- - -- [Add Firebase to your Android Project](https://firebase.google.com/docs/android/setup). -- Open the App Indexing project in Android Studio. -- Run the sample on your Android device or emulator by issuing the following command using **adb** tool: -`adb shell am start -a android.intent.action.VIEW -d "https://www.example.com/articles/test" com.google.samples.quickstart.appindexing` -- Use ADD STICKERS and CLEAR STICKERS buttons to add and remove stickers from the index. - -Result ------------ - - -Support -------- - -- [Stack Overflow](https://stackoverflow.com/questions/tagged/android-app-indexing) -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2018 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/app-indexing/app/.gitignore b/app-indexing/app/.gitignore deleted file mode 100644 index 796b96d1c4..0000000000 --- a/app-indexing/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/app-indexing/app/build.gradle b/app-indexing/app/build.gradle deleted file mode 100644 index 6b66c1920d..0000000000 --- a/app-indexing/app/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -plugins { - id 'com.android.application' - id 'kotlin-android' - id 'com.google.gms.google-services' -} - -check.dependsOn 'assembleDebugAndroidTest' - -android { - compileSdkVersion 30 - - defaultConfig { - applicationId "com.google.samples.quickstart.appindexing" - minSdkVersion 18 - targetSdkVersion 30 - versionCode 2 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - buildFeatures { - viewBinding = true - } -} - -dependencies { - implementation project(":internal:lintchecks") - implementation project(":internal:chooserx") - // [START app_indexing_gradle_dep] - implementation 'com.google.firebase:firebase-appindexing:20.0.0' - // [END app_indexing_gradle_dep] - - implementation 'com.google.android.material:material:1.4.0' - - // Testing - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'androidx.test:rules:1.4.0' - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' -} - diff --git a/app-indexing/app/proguard-rules.pro b/app-indexing/app/proguard-rules.pro deleted file mode 100644 index 59d7489c33..0000000000 --- a/app-indexing/app/proguard-rules.pro +++ /dev/null @@ -1,20 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# 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 *; -#} - --keepattributes EnclosingMethod --keepattributes InnerClasses diff --git a/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/MainActivityTest.java b/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/MainActivityTest.java deleted file mode 100644 index 62330adc93..0000000000 --- a/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/MainActivityTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.google.samples.quickstart.appindexing; -/* - * Copyright (C) The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import android.content.Intent; -import android.net.Uri; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.rule.ActivityTestRule; - -import com.google.samples.quickstart.appindexing.java.MainActivity; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; -import static androidx.test.espresso.matcher.ViewMatchers.withText; - - -@RunWith(AndroidJUnit4.class) -public class MainActivityTest { - - @Rule - public ActivityTestRule rule = - new ActivityTestRule<>(MainActivity.class, true, false /* launchActivity */); - - @Test - public void testDeepLink() { - // Create intent to MainActivity - String link = "http://www.example.com/articles/test"; - Intent linkIntent = new Intent(Intent.ACTION_VIEW) - .setData(Uri.parse(link)) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - rule.launchActivity(linkIntent); - - onView(withText(link)) - .check(matches(isDisplayed())); - } -} diff --git a/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/kotlin/MainActivityTest.kt b/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/kotlin/MainActivityTest.kt deleted file mode 100644 index 63638c9f16..0000000000 --- a/app-indexing/app/src/androidTest/java/com/google/samples/quickstart/appindexing/kotlin/MainActivityTest.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.google.samples.quickstart.appindexing.kotlin - -import android.content.Intent -import android.net.Uri -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.isDisplayed -import androidx.test.espresso.matcher.ViewMatchers.withText -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.rule.ActivityTestRule -import com.google.samples.quickstart.appindexing.java.MainActivity -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class MainActivityTest { - - @Rule - var rule = ActivityTestRule(MainActivity::class.java, true, false /* launchActivity */) - - @Test - fun testDeepLink() { - // Create intent to MainActivity - val link = "http://www.example.com/kotlin_articles/test" - val linkIntent = Intent(Intent.ACTION_VIEW) - .setData(Uri.parse(link)) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) - rule.launchActivity(linkIntent) - - onView(withText(link)) - .check(matches(isDisplayed())) - } -} diff --git a/app-indexing/app/src/main/AndroidManifest.xml b/app-indexing/app/src/main/AndroidManifest.xml deleted file mode 100644 index 3fb79c6270..0000000000 --- a/app-indexing/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/EntryChoiceActivity.kt b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/EntryChoiceActivity.kt deleted file mode 100644 index ffe2a1c38e..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/EntryChoiceActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.google.samples.quickstart.appindexing - -import android.content.Intent -import com.firebase.example.internal.BaseEntryChoiceActivity -import com.firebase.example.internal.Choice -import com.google.samples.quickstart.appindexing.java.MainActivity - -class EntryChoiceActivity : BaseEntryChoiceActivity() { - - override fun getChoices(): List { - return listOf( - Choice( - "Java", - "Run the Firebase App Indexing quickstart written in Java.", - Intent(this, MainActivity::class.java)), - Choice( - "Kotlin", - "Run the Firebase App Indexing quickstart written in Kotlin.", - Intent(this, com.google.samples.quickstart.appindexing.kotlin.MainActivity::class.java)) - ) - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingService.java b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingService.java deleted file mode 100644 index 14064e5fd5..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.google.samples.quickstart.appindexing.java; - -import android.app.IntentService; -import android.content.Intent; - -import com.google.android.gms.tasks.Task; -import com.google.android.gms.tasks.Tasks; - -import com.google.firebase.appindexing.FirebaseAppIndex; - -import java.util.concurrent.ExecutionException; - -public class AppIndexingService extends IntentService { - - public AppIndexingService() { - super("AppIndexingService"); - } - - @Override - protected void onHandleIntent(Intent intent) { - final Task setStickersTask = AppIndexingUtil.setStickers(getApplicationContext(), - FirebaseAppIndex.getInstance(getApplicationContext())); - if (setStickersTask != null) { - try { - Tasks.await(setStickersTask); - } catch (ExecutionException e) { - // setStickersTask failed - } catch (InterruptedException e) { - // this thread was interrupted while waiting for setStickersTask to complete - } - } - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingUtil.java b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingUtil.java deleted file mode 100644 index a97576de15..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/AppIndexingUtil.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.google.samples.quickstart.appindexing.java; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.util.Log; -import android.widget.Toast; - -import androidx.annotation.NonNull; - -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.appindexing.FirebaseAppIndex; -import com.google.firebase.appindexing.FirebaseAppIndexingInvalidArgumentException; -import com.google.firebase.appindexing.Indexable; -import com.google.firebase.appindexing.builders.Indexables; -import com.google.firebase.appindexing.builders.StickerBuilder; -import com.google.firebase.appindexing.builders.StickerPackBuilder; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * See firebase app indexing api code lab - * https://codelabs.developers.google.com/codelabs/app-indexing/#0 - */ - -public class AppIndexingUtil { - private static final String STICKER_FILENAME_PATTERN = "sticker%s.png"; - private static final String CONTENT_URI_ROOT = - String.format("content://%s/", StickerProvider.class.getName()); - private static final String STICKER_URL_PATTERN = "mystickers://sticker/%s"; - private static final String STICKER_PACK_URL_PATTERN = "mystickers://sticker/pack/%s"; - private static final String STICKER_PACK_NAME = "Local Content Pack"; - private static final String TAG = "AppIndexingUtil"; - public static final String FAILED_TO_CLEAR_STICKERS = "Failed to clear stickers"; - public static final String FAILED_TO_INSTALL_STICKERS = "Failed to install stickers"; - - public static void clearStickers(final Context context, FirebaseAppIndex firebaseAppIndex) { - Task task = firebaseAppIndex.removeAll(); - - task.addOnSuccessListener(new OnSuccessListener() { - @Override - public void onSuccess(Void aVoid) { - Toast.makeText(context, "Successfully cleared stickers", Toast.LENGTH_SHORT).show(); - } - }); - task.addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Log.w(TAG, FAILED_TO_CLEAR_STICKERS, e); - Toast.makeText(context, FAILED_TO_CLEAR_STICKERS, Toast.LENGTH_SHORT).show(); - } - }); - } - - public static Task setStickers(final Context context, FirebaseAppIndex firebaseAppIndex) { - try { - List stickers = getIndexableStickers(context); - Indexable stickerPack = getIndexableStickerPack(context); - - List indexables = new ArrayList<>(stickers); - indexables.add(stickerPack); - - Task task = firebaseAppIndex.update( - indexables.toArray(new Indexable[indexables.size()])); - - task.addOnSuccessListener(new OnSuccessListener() { - @Override - public void onSuccess(Void aVoid) { - Toast.makeText(context, "Successfully added stickers", Toast.LENGTH_SHORT) - .show(); - } - }); - - task.addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Log.d(TAG, FAILED_TO_INSTALL_STICKERS, e); - Toast.makeText(context, FAILED_TO_INSTALL_STICKERS, Toast.LENGTH_SHORT) - .show(); - } - }); - - return task; - } catch (IOException | FirebaseAppIndexingInvalidArgumentException e) { - Log.e(TAG, "Unable to set stickers", e); - return null; - } - } - - private static Indexable getIndexableStickerPack(Context context) - throws IOException, FirebaseAppIndexingInvalidArgumentException { - List stickerBuilders = getStickerBuilders(context); - File stickersDir = new File(context.getFilesDir(), "stickers"); - - if (!stickersDir.exists() && !stickersDir.mkdirs()) { - throw new IOException("Stickers directory does not exist"); - } - - // Use the last sticker for category image for the sticker pack. - final int lastIndex = stickerBuilders.size() - 1; - final String stickerName = getStickerFilename(lastIndex); - final String imageUrl = getStickerUrl(stickerName); - - StickerPackBuilder stickerPackBuilder = Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME) - // Firebase App Indexing unique key that must match an intent-filter. - // (e.g. mystickers://sticker/pack/0) - .setUrl(String.format(STICKER_PACK_URL_PATTERN, lastIndex)) - // Defaults to the first sticker in "hasSticker". Used to select between sticker - // packs so should be representative of the sticker pack. - .setImage(imageUrl) - .setHasSticker(stickerBuilders.toArray(new StickerBuilder[stickerBuilders.size()])) - .setDescription("content description"); - return stickerPackBuilder.build(); - } - - private static List getIndexableStickers(Context context) throws IOException, - FirebaseAppIndexingInvalidArgumentException { - List indexableStickers = new ArrayList<>(); - List stickerBuilders = getStickerBuilders(context); - - for (StickerBuilder stickerBuilder : stickerBuilders) { - stickerBuilder - .setIsPartOf(Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME)) - .put("keywords", "tag1", "tag2"); - indexableStickers.add(stickerBuilder.build()); - } - - return indexableStickers; - } - - private static List getStickerBuilders(Context context) throws IOException { - List stickerBuilders = new ArrayList<>(); - int[] stickerColors = new int[] {Color.GREEN, Color.RED, Color.BLUE, - Color.YELLOW, Color.MAGENTA}; - - File stickersDir = new File(context.getFilesDir(), "stickers"); - - if (!stickersDir.exists() && !stickersDir.mkdirs()) { - throw new IOException("Stickers directory does not exist"); - } - - for (int i = 0; i < stickerColors.length; i++) { - String stickerFilename = getStickerFilename(i); - File stickerFile = new File(stickersDir, stickerFilename); - String imageUrl = getStickerUrl(stickerFilename); - writeSolidColorBitmapToFile(stickerFile, stickerColors[i]); - - StickerBuilder stickerBuilder = Indexables.stickerBuilder() - .setName(getStickerFilename(i)) - // Firebase App Indexing unique key that must match an intent-filter - // (e.g. mystickers://sticker/0) - .setUrl(String.format(STICKER_URL_PATTERN, i)) - // http url or content uri that resolves to the sticker - // (e.g. http://www.google.com/sticker.png or content://some/path/0) - .setImage(imageUrl) - .setDescription("content description") - .setIsPartOf(Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME)) - .put("keywords", "tag1", "tag2"); - stickerBuilders.add(stickerBuilder); - } - - return stickerBuilders; - } - - private static String getStickerFilename(int index) { - return String.format(STICKER_FILENAME_PATTERN, index); - } - - private static String getStickerUrl(String filename) { - return CONTENT_URI_ROOT + filename; - } - - /** - * Writes a simple bitmap to local storage. The image is a solid color with size 400x400 - */ - private static void writeSolidColorBitmapToFile(File file, int color) throws IOException { - if (!file.exists()) { - Bitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888); - bitmap.eraseColor(color); - - FileOutputStream fos = null; - try { - fos = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); - } finally { - if (fos != null) { - fos.close(); - } - } - } - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/MainActivity.java b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/MainActivity.java deleted file mode 100644 index e98cd2ce6e..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/MainActivity.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.quickstart.appindexing.java; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; -// [START import_classes] -import com.google.firebase.appindexing.FirebaseAppIndex; -import com.google.firebase.appindexing.FirebaseUserActions; -import com.google.firebase.appindexing.Indexable; -import com.google.firebase.appindexing.builders.Actions; -// [END import_classes] -import com.google.samples.quickstart.appindexing.R; -import com.google.samples.quickstart.appindexing.databinding.ActivityMainBinding; - -public class MainActivity extends AppCompatActivity { - - private static final String TAG = MainActivity.class.getName(); - // Define a title for your current page, shown in autocompletion UI - private static final String TITLE = "Sample Article"; - private String articleId; - - // [START handle_intent] - @Override - protected void onCreate(Bundle savedInstanceState) { - // [START_EXCLUDE] - super.onCreate(savedInstanceState); - ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - final FirebaseAppIndex firebaseAppIndex = FirebaseAppIndex.getInstance(this); - - binding.addStickersBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - startService(new Intent(MainActivity.this, AppIndexingService.class)); - } - }); - binding.clearStickersBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AppIndexingUtil.clearStickers(MainActivity.this, firebaseAppIndex); - } - }); - // [END_EXCLUDE] - onNewIntent(getIntent()); - } - - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - String action = intent.getAction(); - Uri data = intent.getData(); - if (Intent.ACTION_VIEW.equals(action) && data != null) { - articleId = data.getLastPathSegment(); - TextView linkText = findViewById(R.id.link); - linkText.setText(data.toString()); - } - } - // [END handle_intent] - - // [START app_indexing_view] - @Override - public void onStart() { - super.onStart(); - if (articleId == null) return; - final Uri BASE_URL = Uri.parse("https://www.example.com/articles/"); - final String APP_URI = BASE_URL.buildUpon().appendPath(articleId).build().toString(); - - Indexable articleToIndex = new Indexable.Builder() - .setName(TITLE) - .setUrl(APP_URI) - .build(); - - Task task = FirebaseAppIndex.getInstance(this).update(articleToIndex); - - // If the Task is already complete, a call to the listener will be immediately - // scheduled - task.addOnSuccessListener(MainActivity.this, new OnSuccessListener() { - @Override - public void onSuccess(Void aVoid) { - Log.d(TAG, "App Indexing API: Successfully added " + TITLE + " to index"); - } - }); - - task.addOnFailureListener(MainActivity.this, new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception exception) { - Log.e(TAG, "App Indexing API: Failed to add " + TITLE + " to index. " + exception - .getMessage()); - } - }); - - // log the view action - Task actionTask = FirebaseUserActions.getInstance(this).start(Actions.newView(TITLE, - APP_URI)); - - actionTask.addOnSuccessListener(MainActivity.this, new OnSuccessListener() { - @Override - public void onSuccess(Void aVoid) { - Log.d(TAG, "App Indexing API: Successfully started view action on " + TITLE); - } - }); - - actionTask.addOnFailureListener(MainActivity.this, new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception exception) { - Log.e(TAG, "App Indexing API: Failed to start view action on " + TITLE + ". " - + exception.getMessage()); - } - }); - } - - @Override - public void onStop() { - super.onStop(); - - if (articleId == null) return; - final Uri BASE_URL = Uri.parse("https://www.example.com/articles/"); - final String APP_URI = BASE_URL.buildUpon().appendPath(articleId).build().toString(); - - Task actionTask = FirebaseUserActions.getInstance(this).end(Actions.newView(TITLE, - APP_URI)); - - actionTask.addOnSuccessListener(MainActivity.this, new OnSuccessListener() { - @Override - public void onSuccess(Void aVoid) { - Log.d(TAG, "App Indexing API: Successfully ended view action on " + TITLE); - } - }); - - actionTask.addOnFailureListener(MainActivity.this, new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception exception) { - Log.e(TAG, "App Indexing API: Failed to end view action on " + TITLE + ". " - + exception.getMessage()); - } - }); - } - // [END app_indexing_view] -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/StickerProvider.java b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/StickerProvider.java deleted file mode 100644 index d597e1905e..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/java/StickerProvider.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.google.samples.quickstart.appindexing.java; - -import android.content.ContentProvider; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.os.ParcelFileDescriptor; -import android.webkit.MimeTypeMap; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; - -/** - * Provider that makes the stickers queryable by other applications. - */ -public class StickerProvider extends ContentProvider { - @Nullable - private File mRootDir; - - @Override - public boolean onCreate() { - final Context context = getContext(); - if (context != null) { - mRootDir = new File(context.getFilesDir(), "stickers"); - try { - mRootDir = mRootDir.getCanonicalFile(); - } catch (IOException e) { - mRootDir = null; - } - } - return mRootDir != null; - } - - @Nullable - @Override - public String getType(@NonNull Uri uri) { - final File file = uriToFile(uri); - if (!isFileInRoot(file)) { - throw new SecurityException("File is not in root: " + file); - } - return getMimeType(file); - } - - @Nullable - @Override - public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) - throws FileNotFoundException { - final File file = uriToFile(uri); - if (!isFileInRoot(file)) { - throw new SecurityException("File is not in root: " + file); - } - return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); - } - - private File uriToFile(@NonNull Uri uri) { - if (mRootDir == null) { - throw new IllegalStateException("Root directory is null"); - } - File file = new File(mRootDir, uri.getEncodedPath()); - try { - file = file.getCanonicalFile(); - } catch (IOException e) { - throw new IllegalArgumentException("Failed to get canonical file: " + file); - } - return file; - } - - private boolean isFileInRoot(@NonNull File file) { - return mRootDir != null && file.getPath().startsWith(mRootDir.getPath()); - } - - private String getMimeType(@NonNull File file) { - String mimeType = null; - final String extension = getFileExtension(file); - if (extension != null) { - mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); - } - if (mimeType == null) { - mimeType = "application/octet-stream"; - } - return mimeType; - } - - @Nullable - private String getFileExtension(@NonNull File file) { - String extension = null; - final String filename = file.getName(); - final int index = filename.lastIndexOf('.'); - if (index >= 0) { - extension = filename.substring(index + 1); - } - return extension; - } - - @Nullable - @Override - public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, - @Nullable String[] selectionArgs, @Nullable String sortOrder) { - throw new UnsupportedOperationException("no queries"); - } - - @Nullable - @Override - public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { - throw new UnsupportedOperationException("no inserts"); - } - - @Override - public int delete(@NonNull Uri uri, @Nullable String selection, - @Nullable String[] selectionArgs) { - throw new UnsupportedOperationException("no deletes"); - } - - @Override - public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, - @Nullable String[] selectionArgs) { - throw new UnsupportedOperationException("no updates"); - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingService.kt b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingService.kt deleted file mode 100644 index ba9839710d..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingService.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.google.samples.quickstart.appindexing.kotlin - -import android.app.IntentService -import android.content.Intent -import com.google.firebase.appindexing.FirebaseAppIndex - -class AppIndexingService : IntentService("AppIndexingService") { - - override fun onHandleIntent(intent: Intent?) { - AppIndexingUtil.setStickers(applicationContext, FirebaseAppIndex.getInstance(applicationContext)) - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingUtil.kt b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingUtil.kt deleted file mode 100644 index 7fffcd7888..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/AppIndexingUtil.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.google.samples.quickstart.appindexing.kotlin - -import android.content.Context -import android.graphics.Bitmap -import android.graphics.Color -import android.util.Log -import android.widget.Toast -import com.google.firebase.appindexing.FirebaseAppIndex -import com.google.firebase.appindexing.FirebaseAppIndexingInvalidArgumentException -import com.google.firebase.appindexing.Indexable -import com.google.firebase.appindexing.builders.Indexables -import com.google.firebase.appindexing.builders.StickerBuilder -import java.io.File -import java.io.FileOutputStream -import java.io.IOException - -/** - * See firebase app indexing api code lab - * https://codelabs.developers.google.com/codelabs/app-indexing/#0 - */ - -object AppIndexingUtil { - private const val STICKER_FILENAME_PATTERN = "sticker%s.png" - private val CONTENT_URI_ROOT = String.format("content://%s/", StickerProvider::class.java.name) - private const val STICKER_URL_PATTERN = "mystickers://sticker/%s" - private const val STICKER_PACK_URL_PATTERN = "mystickers://sticker/pack/%s" - private const val STICKER_PACK_NAME = "Local Content Pack" - private const val TAG = "AppIndexingUtil" - private const val FAILED_TO_CLEAR_STICKERS = "Failed to clear stickers" - private const val FAILED_TO_INSTALL_STICKERS = "Failed to install stickers" - - fun clearStickers(context: Context, firebaseAppIndex: FirebaseAppIndex) { - val task = firebaseAppIndex.removeAll() - - task.addOnSuccessListener { - Toast.makeText(context, "Successfully cleared stickers", Toast.LENGTH_SHORT).show() - } - task.addOnFailureListener { e -> - Log.w(TAG, FAILED_TO_CLEAR_STICKERS, e) - Toast.makeText(context, FAILED_TO_CLEAR_STICKERS, Toast.LENGTH_SHORT).show() - } - } - - fun setStickers(context: Context, firebaseAppIndex: FirebaseAppIndex) { - try { - val stickers = getIndexableStickers(context) - val stickerPack = getIndexableStickerPack(context) - - val indexables = ArrayList(stickers) - indexables.add(stickerPack) - - val task = firebaseAppIndex.update(*indexables.toTypedArray()) - - task.addOnSuccessListener { - Toast.makeText(context, "Successfully added stickers", Toast.LENGTH_SHORT) - .show() - } - - task.addOnFailureListener { e -> - Log.d(TAG, FAILED_TO_INSTALL_STICKERS, e) - Toast.makeText(context, FAILED_TO_INSTALL_STICKERS, Toast.LENGTH_SHORT) - .show() - } - } catch (e: IOException) { - Log.e(TAG, "Unable to set stickers", e) - } catch (e: FirebaseAppIndexingInvalidArgumentException) { - Log.e(TAG, "Unable to set stickers", e) - } - } - - @Throws(IOException::class, FirebaseAppIndexingInvalidArgumentException::class) - private fun getIndexableStickerPack(context: Context): Indexable { - val stickerBuilders = getStickerBuilders(context) - val stickersDir = File(context.filesDir, "stickers") - - if (!stickersDir.exists() && !stickersDir.mkdirs()) { - throw IOException("Stickers directory does not exist") - } - - // Use the last sticker for category image for the sticker pack. - val lastIndex = stickerBuilders.size - 1 - val stickerName = getStickerFilename(lastIndex) - val imageUrl = getStickerUrl(stickerName) - - val stickerPackBuilder = Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME) - // Firebase App Indexing unique key that must match an intent-filter. - // (e.g. mystickers://sticker/pack/0) - .setUrl(String.format(STICKER_PACK_URL_PATTERN, lastIndex)) - // Defaults to the first sticker in "hasSticker". Used to select between sticker - // packs so should be representative of the sticker pack. - .setImage(imageUrl) - .setHasSticker(*stickerBuilders.toTypedArray()) - .setDescription("content description") - return stickerPackBuilder.build() - } - - @Throws(IOException::class, FirebaseAppIndexingInvalidArgumentException::class) - private fun getIndexableStickers(context: Context): List { - val indexableStickers = arrayListOf() - val stickerBuilders = getStickerBuilders(context) - - for (stickerBuilder in stickerBuilders) { - stickerBuilder - .setIsPartOf(Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME)) - .put("keywords", "tag1", "tag2") - indexableStickers.add(stickerBuilder.build()) - } - - return indexableStickers - } - - @Throws(IOException::class) - private fun getStickerBuilders(context: Context): List { - val stickerBuilders = arrayListOf() - val stickerColors = intArrayOf(Color.GREEN, Color.RED, Color.BLUE, Color.YELLOW, Color.MAGENTA) - - val stickersDir = File(context.filesDir, "stickers") - - if (!stickersDir.exists() && !stickersDir.mkdirs()) { - throw IOException("Stickers directory does not exist") - } - - for (i in stickerColors.indices) { - val stickerFilename = getStickerFilename(i) - val stickerFile = File(stickersDir, stickerFilename) - val imageUrl = getStickerUrl(stickerFilename) - writeSolidColorBitmapToFile(stickerFile, stickerColors[i]) - - val stickerBuilder = Indexables.stickerBuilder() - .setName(getStickerFilename(i)) - // Firebase App Indexing unique key that must match an intent-filter - // (e.g. mystickers://sticker/0) - .setUrl(String.format(STICKER_URL_PATTERN, i)) - // http url or content uri that resolves to the sticker - // (e.g. http://www.google.com/sticker.png or content://some/path/0) - .setImage(imageUrl) - .setDescription("content description") - .setIsPartOf(Indexables.stickerPackBuilder() - .setName(STICKER_PACK_NAME)) - .put("keywords", "tag1", "tag2") - stickerBuilders.add(stickerBuilder) - } - - return stickerBuilders - } - - private fun getStickerFilename(index: Int) = String.format(STICKER_FILENAME_PATTERN, index) - - private fun getStickerUrl(filename: String) = CONTENT_URI_ROOT + filename - - /** - * Writes a simple bitmap to local storage. The image is a solid color with size 400x400 - */ - @Throws(IOException::class) - private fun writeSolidColorBitmapToFile(file: File, color: Int) { - if (!file.exists()) { - val bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888) - bitmap.eraseColor(color) - - var fos: FileOutputStream? = null - try { - fos = FileOutputStream(file) - bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos) - } finally { - fos?.close() - } - } - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/MainActivity.kt b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/MainActivity.kt deleted file mode 100644 index 7fe2a8757b..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/MainActivity.kt +++ /dev/null @@ -1,121 +0,0 @@ -package com.google.samples.quickstart.appindexing.kotlin - -import android.content.Intent -import android.net.Uri -import android.os.Bundle -import android.util.Log -import android.widget.TextView -import androidx.appcompat.app.AppCompatActivity -// [START import_classes] -import com.google.firebase.appindexing.FirebaseAppIndex -import com.google.firebase.appindexing.FirebaseUserActions -import com.google.firebase.appindexing.Indexable -import com.google.firebase.appindexing.builders.Actions -// [END import_classes] -import com.google.samples.quickstart.appindexing.databinding.ActivityMainBinding - -class MainActivity : AppCompatActivity() { - - private var articleId: String? = null - private lateinit var binding: ActivityMainBinding - private lateinit var linkText: TextView - - // [START handle_intent] - override fun onCreate(savedInstanceState: Bundle?) { - // [START_EXCLUDE] - super.onCreate(savedInstanceState) - binding = ActivityMainBinding.inflate(layoutInflater) - setContentView(binding.root) - - val firebaseAppIndex = FirebaseAppIndex.getInstance(this) - - with(binding) { - addStickersBtn.setOnClickListener { startService(Intent(baseContext, AppIndexingService::class.java)) } - - clearStickersBtn.setOnClickListener { AppIndexingUtil.clearStickers(baseContext, firebaseAppIndex) } - } - linkText = binding.link - - // [END_EXCLUDE] - onNewIntent(intent) - } - - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - val action = intent.action - val data = intent.data - if (Intent.ACTION_VIEW == action && data != null) { - articleId = data.lastPathSegment - linkText.text = data.toString() - } - } - // [END handle_intent] - - // [START app_indexing_view] - public override fun onStart() { - super.onStart() - - if (articleId == null) { - return - } - - val baseUrl = Uri.parse("https://www.example.com/kotlin_articles/") - val appUri = baseUrl.buildUpon().appendPath(articleId).build().toString() - - val articleToIndex = Indexable.Builder() - .setName(TITLE) - .setUrl(appUri) - .build() - - val task = FirebaseAppIndex.getInstance(this).update(articleToIndex) - - // If the Task is already complete, a call to the listener will be immediately - // scheduled - task.addOnSuccessListener(this) { Log.d(TAG, "App Indexing API: Successfully added $TITLE to index") } - - task.addOnFailureListener(this) { exception -> - Log.e(TAG, "App Indexing API: Failed to add $TITLE to index. ${exception.message}") - } - - // log the view action - val actionTask = FirebaseUserActions.getInstance(this).start(Actions.newView(TITLE, - appUri)) - - actionTask.addOnSuccessListener(this) { - Log.d(TAG, "App Indexing API: Successfully started view action on $TITLE") - } - - actionTask.addOnFailureListener(this) { exception -> - Log.e(TAG, "App Indexing API: Failed to start view action on $TITLE. ${exception.message}") - } - } - - public override fun onStop() { - super.onStop() - if (articleId == null) { - return - } - - val baseUrl = Uri.parse("https://www.example.com/kotlin_articles/") - val appUri = baseUrl.buildUpon().appendPath(articleId).build().toString() - - val actionTask = FirebaseUserActions.getInstance(this).end(Actions.newView(TITLE, - appUri)) - - actionTask.addOnSuccessListener(this) { - Log.d(TAG, "App Indexing API: Successfully ended view action on $TITLE") - } - - actionTask.addOnFailureListener(this) { exception -> - Log.e(TAG, "App Indexing API: Failed to end view action on $TITLE. ${exception.message}") - } - } - // [END app_indexing_view] - - companion object { - - private val TAG = MainActivity::class.java.name - // Define a title for your current page, shown in autocompletion UI - private const val TITLE = "Sample Article" - } -} diff --git a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/StickerProvider.kt b/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/StickerProvider.kt deleted file mode 100644 index 7ac0e10ff3..0000000000 --- a/app-indexing/app/src/main/java/com/google/samples/quickstart/appindexing/kotlin/StickerProvider.kt +++ /dev/null @@ -1,114 +0,0 @@ -package com.google.samples.quickstart.appindexing.kotlin - -import android.content.ContentProvider -import android.content.ContentValues -import android.database.Cursor -import android.net.Uri -import android.os.ParcelFileDescriptor -import android.webkit.MimeTypeMap -import java.io.File -import java.io.FileNotFoundException -import java.io.IOException - -/** - * Provider that makes the stickers queryable by other applications. - */ -class StickerProvider : ContentProvider() { - - private lateinit var rootDir: File - - override fun onCreate(): Boolean { - rootDir = File(context?.filesDir, "stickers") - return try { - rootDir = rootDir.canonicalFile - true - } catch (e: IOException) { - false - } - } - - override fun getType(uri: Uri): String? { - val file = uriToFile(uri) - if (!isFileInRoot(file)) { - throw SecurityException("File is not in root: $file") - } - return getMimeType(file) - } - - @Throws(FileNotFoundException::class) - override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? { - val file = uriToFile(uri) - if (!isFileInRoot(file)) { - throw SecurityException("File is not in root: $file") - } - return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY) - } - - private fun uriToFile(uri: Uri): File { - var file = File(rootDir, uri.encodedPath) - try { - file = file.canonicalFile - } catch (e: IOException) { - throw IllegalArgumentException("Failed to get canonical file: $file") - } - - return file - } - - private fun isFileInRoot(file: File): Boolean { - return file.path.startsWith(rootDir.path) - } - - private fun getMimeType(file: File): String { - var mimeType: String? = null - val extension = getFileExtension(file) - if (extension != null) { - mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) - } - if (mimeType == null) { - mimeType = "application/octet-stream" - } - return mimeType - } - - private fun getFileExtension(file: File): String? { - var extension: String? = null - val filename = file.name - val index = filename.lastIndexOf('.') - if (index >= 0) { - extension = filename.substring(index + 1) - } - return extension - } - - override fun query( - uri: Uri, - projection: Array?, - selection: String?, - selectionArgs: Array?, - sortOrder: String? - ): Cursor? { - throw UnsupportedOperationException("no queries") - } - - override fun insert(uri: Uri, values: ContentValues?): Uri? { - throw UnsupportedOperationException("no inserts") - } - - override fun delete( - uri: Uri, - selection: String?, - selectionArgs: Array? - ): Int { - throw UnsupportedOperationException("no deletes") - } - - override fun update( - uri: Uri, - values: ContentValues?, - selection: String?, - selectionArgs: Array? - ): Int { - throw UnsupportedOperationException("no updates") - } -} diff --git a/app-indexing/app/src/main/res/drawable-hdpi/firebase_lockup_400.png b/app-indexing/app/src/main/res/drawable-hdpi/firebase_lockup_400.png deleted file mode 100644 index 2eb21fecd1d75c4d52afcab40f464155a53c68f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8076 zcmd5>_ct6~uot5DAVgUuQKA#w>SaU1+Jsf2msruGcUE6DL}!JSAbJ-yI^P5yJ=_x_4^&YU^()BW7}%-lJ5&L>t+7eq|087R$)!w(%?()ixJBv~D zWJ+;0zgQsZ5#7u<&T{z~$g#{C)8-4}b!BZMdfvG*e{K<5mH+qbNtBpUE?dFd&qWqW zo-7A|E7IGlV71`Wt^}%HpiqxYfQ-PyUq3jE9quVVN3-r@3@F+!x$*WTy2Rt_BI{JE z@z(cu(pT$*Fku+ApbPLufZ^Up;=_;9UtcUJ{=?RtBcC)HoVuK3PENqHO@UOp+HUpk zEiXTAvqYv_)yq4J7}>;Qq}J>hxR%{8;>p|C^$rC?d785v%O{$x<9Bcd4}FG4ND7s@ z@-xn!x0RJ}x_hdOWvbkCZAMr;*y{y`v$uT)PmudYmbU6sikzGnuW+kPG=!-dJOhqeD&5VEb!k099k zX@%R$A3NH&=j*)YCR)5xoer3V+g*zE$OP3lS@zweQB)DjQd5&qJ@++Ee1tN$JUwUf zzf4*Urc&Qu^5PEOg6cwFXnx@6X&O5BarUNC$|J?3-;2kOzX~9q^blJypNk(P6Cdo; zCZi6ex80(;9Pw)3e=P2%r*!06f-zLVe~v8j<_uTcwqwf#=5t?b<*Kds$*2D+xHbFV zVqXJQeU2WJ_g*;H+?_Bq<9eYZhb)7)$VlNS-+P1BKhK@j5zS?6^~|OQ*Ja9uE3GBaeMbXhcHo1E6FJj-Qs z<4yS&CMFd@nUE^kDwv*|FZIkJcKt5SM|wo~iB~HNu;E0HK54{zHzt)HIu&L}e!zmo+Y>ON z&8UcSQs8I%p(}x4U>1AdlXx}s`&t)Uv^%J+TKd|3F2aN;{-$O=U}dQptaR@Ymf~T1 ze9G&>CGXGp4_-2Vg>U7h0qL!jpSMMH>nSo@f($D-DkuRHa(gkWWj`mzrbnDu2*;T( zL%+yR2a2FcZ|LH{c-8^l52PPRej&J^Qc*f zi|EG7Z<#RN(EkM4YZmNC3>*<4h339sC8O?J*5V+wZr@+pE#c1+X`~nha>>%zKfB+B zmj&FwRH5#lwc#G(F49_#c|+gr?(=pBKk}o>`n#3;vwX5IKbf=Ugj$I7{*6l24)qBe z&`WaQVVfd2i0I6JAk0ZkD)3XqGP#fO5pzG2vw)E>|EG(*weBv>8vH|5spVv5J$i2T zwsKw24+`#ze*B1Xo{J5~qFVRAcD8DI=c;dL%C?4NS-Frd8KT*HOd-pD8tBn7cHiV5 zk?Kh(t_I#|APEpSMa0~%I^GB;v_NHY@M&3tn5>NL>$r4f0^=(rVnD z4GNxGz3|g$6y>PBjiaDU{-$@rZ)}4}iH$^EK;^Wl zzTnxjo%NU{l3F=m;F_B1kcXjoCJ4;+NNUuPI<*C)37nwid^ZX5+c7aM9ci9mFVu11 ziI-^$z1VB3_nEoL--1J4TT8dr@Rp^BkQtQejybiy@5}elDPkNgn6Z&MEB+AR-dZ=j zS@=~*p}eMWth|Gb*X(jYyo2Z!u!sPT8S^x>;WJbw5}(iZ(r-LlO}Xl=cJ1z<9Bs!d z$L6glE@K>y>o>bSXD6F=AoR+qX9_C^pAKPO1^#HRY3?pv2A$)4Rbm>%nLYezB27=N zTm1gvtf(7&J~g-UcGWx0(&M?weHvkFad&5*c=Aw0>qRhXn7;k-?Uq-p6tANrYM9E> zuG(1hl~PppbZ&WG9P*65ytzF7mv=Ir*F#3f>TW5j8@`Kz_e2O(7`%$~tB&K}j%r3j z?W`+lZ)OjpRSB6?gU?Y-_#z3h+p9(Rrs3Xh=)mcFrCogTuU0fT-2W{lf(uz*QZ z0~-SesT6=9SaorRwVHC8tx#ys? zyWrzjXTYFjDCS9S1oU?ieI+$08Ygc8cA`qnPTX7lqQc}fh=`4(iM2cBq1tk(1F{Du zvp5iTUH~x712$n*a~i*>dNY`?-HSv@)gN>CJYatyMfA?0>pgJFtLx05gy{~CVg7wH zx}O?9h%l!wxtX{AB=9s_f#fEB6V)X~5id1G^iCt^iv`awh)O53FFhM2piI+gY*FLY z94VBfp>2>+;ATy_>G2YulLpl5LIqOuA*{+@JLhT(VVySoru-CK5dTzXlz16QIQ)b@ z?qzYnID_lW#U6`VHZ6~LyhNJ?NJD_|tZ>{$v-^(W7(U)KmPkIUgf^$Vw~z^cF`n!IR!yf+R(Q)it1?P($9Hpm%Y$W+KQ#DRtk=axRpk@m zA%sW=MRrh_#v%Hp^^z(f6qVFd!-P2-a0T{R6EdtG<<#=ql9<~seUcZVhn&ZdMRC6n z;my52mL6KL9+Tz8YVcevbdGe=s06onQ1M^}El4X2sC~O_C&~7N!pgGtM^fd2qkEd? zzcN~q9euQU(?S;-v|aY&vXygHhpBj*#3QFXH`!+!8jEXA0JSGpYz5(RPn=B2aMs^xgXM zK!)sjUYK9@L$+AId~TQvHwE`=#1}Tf&3ErT!uzR$RH`?|Sby1+ytFOh6=iMgl&Tkr za-#Bm=u0wOOdrd6ssr<7kUubAmaMN!XA=2cqfj=~UJB}7W9tu*F)KmeanAact>9SD zfg>s(t)8P+Civ@5e7@l02=qk}4Idr`Orh{;+H+rp{px9m-D~Emw~@)6b1aEIk)!*o zrZ#W3uIfpf9fH6HEAm4XO*3?t2{Dd=2}k)gY6{<3ROSDmN6t|efX<@fw(>K&@@B!0 zn^GIUxL!adwqLvi`*m+q(j7_`)Yl|cDg>Fdh-UoD8+fHSD5sfNPC%5ol*35|6*JDAIR{NpoB^Dx({f=K>0QaFQ4+PY)kSosD8XZP?zY2iOnE>JbfS3$2BVy6+Qr2 z8S0ju>b?%p<9s=!P#kZ{#ID)*-B@dk7IR_@C;PPqd!&d2KVcZ+-eOec-7dXVxUBzP zXhte^KsAc;*-*_18NM)S(*R#jSS1L>nJ#H^zg|sf`V{U-5*R;{6B(8>xhX4fP<#ma z_NdI=)!~S*y!UI)XXQa-OD?eJuWILI2u8 z2`?QM^sNL|{-t5i`-_#$Z=b$Hsm(|P>7KOSQQQwCKl2|my=q?AOE2m}!=FlpRxW`e z{t}RQ6y7b}HYrrE%7<vrUwq#GlD;89!>dNHp=CVh9PCSyL>zTi3W8A~k zgvWn*8X}OnxEc;&Liy;cs5SRbh*ke}vI1(|$>$)_g?Jhv66iyCp>tVepG;r-R{SoVu4{@M6}G{H zoOt-2hDd5o_QA8c2UI?BwkJkM0Qplb2@!hNws8gkGIRCT0ESIk+FgJNjlYhGJMB9$ znX%2eSbX=Qnx$$CBGGFS>;1=W3uad%TuO(7FDCJvaUP&Gz)o!2N2Un~&}skb^(S8R zrZlVoiamciO0y-B(V*}=mtz`P#OZaG@n`y;*{vC2O7Ccy_VYjG|9fry z`48K*Dz3B@_1eT;hA3=N_lBct?boFJ1xGIlH%{Qc*CJmG-)j7iPP*L9@UA4JA3K@t ztH!;BowPP8@Y>n*oi7E}bFUXr$Ag2x8IOKQLpk&N$6-CF?iX*PhEhk2Wi;&z@?MRZ zR4lCHUUBzN`Dj@MplSbPN;|4!tzcZY&-f!=!S{@^Yadb$ua?7u>p$MnV&dZS-3@)| z+pDuGCn17%&!ZcCzQ89Q*B4t}IuQ(RC$D>VP|YZJwLUuZDyZl7g?=69fVL!z_XR9y zYO4th2@GJbbIPV29{*~xcBdaMSQTY~gw2m<{VvOKj@4YN4xyiXc)=w1ALA<~IkboG z1GbqRUdEO*Sl$%XaW1rOEsSi50OlJ&nJr@h*aaQMpWLRS%;yMy`V7Un$N9KY93{TE z-k~{3i93o0nfyV*BbPKI$qayr&saWJ%dkg^y0MwHPDP07Jr<`B+~4f30-r-FD|zz+ ze1vJ_O-~ce3Gc$P{K7Qclk#dOycdKPbKg<)=S6ZMXA&S~Kqc_!V&nPxYMW8V z1<%*^hXQwjZD5}_kKMS8b;@Q35UMsz&Gy58Ps;l%6cNQeI6a-l2TB&9xCKUm+xXG7 zUbOvgnQgi^3n2$W=YYbQgrEM^(1~)-I$>4D7i%fzJB6r85w-%atqrv4?7I@s=f-Is zfD-ao>&lTJ^G9LOPJ^(T#tZ1Ch*~kAJz}#Z3Nk9pGf#I+(W}S#yav)0(@HjSp5>X9h&E;OdjYbY?(yZm zGo2^JUQM6D4xa1t32b@oaIp(1^j<)^1@uJ9We_vFvIOplqNJN)TjYtb^Q}jHim_=IRiuO zQJSlfZS*?+_OPIF5%hmo@3mH%M{!njYVilBeS3vI9#8o{x@-S}95Yw-qb04{1}1*H zMEOJ6$qpD#43Cx;wtzz?-C{Pk)1q`B$U9OO_lPqNxv%fNU<}0`BIM?Ar7;^XN z%F=lO0V#E1LEs$P8}K;A8Sifz?P2(8ZFX_JU0xy)kG*NRX9)GO^oy&r?P|ZdAB%PC zmcE_^Y|Ze>U^gK@2yBf&e_c@yQN~*oq~k1 zJp0FPR3(-nWa+tvV~vYu&)WN`DU_tmwch9l5}h-P2tOn8mx9b`PV#6od2U-Zb*O-5D_-94LDe5t74`Ec07OhvKOWRN%fzPxL{Zrxz*3G;^qgunkN z3Z5DvWdTPx@%oKzO(*p-Tu{no9NVm)kW{H_?2Ac6Bx;>(tjL*a0FJ#-q~|t-IZ7Jj zkhNn4Ja%OdGjJhbUJte-F5%h~9T=PSar)rCVB*R-t=g5n3-Rl}XTiiM)jhLM$Bnp3 z0iJ2BO>Aaq=6`hvUyg$4URPd=DThXBjT`TzbgUz@M*UnS_(Nc)yZDjq87p&P5Z#3h zrZv_Mzg2Gx5r>~XMrF)n!BNeE+tn+Bk%Itk3+vT8dyl^hoF)v1AtW~STU zh#5k!ha$OV1D@bo6qy#w3Re9Tw)=Wdwm8}Q;*^x-sXFUW%Iw4R!G>D^|>^wkDP_ekt(aY zV+0lBuHo3obeQ*u?nklM0l9eLP(#x<+~%zxyC&c0Gj)dfKd*VKNzD&kNJ{3dl-Hwv zHYqGQ85rih4uWuQlN}7yMk5btK7tRqJ-wpeu4Lw|@6@Xy=dPsqfe~kYxyHHrL4YgS z0mrcf-LXsJ{?VoQ%Lcj?Ad+NsjiV1%T^Dg<*p6bH3@2L;+Cs26XMKZ_Qwvx;zHIr3 z6A7;QifK)(jC+SM)|n4LU_D&SP8jn%p4pTojcj~*3hT1UO*w&G6L=16E{*oh00*$=Fv?q@bL-Y<9_>C(J%y9axJv+oB7i;yPL96|^3(~hr(jG!o-mZYv6^F&J4f{uCl%r^L9Hx5 zHR>79fLE!Oi91{Dg0S02(0>QUHL0HU`)~gnvh5rUY*7%<=t<|+nxP&<4OLaPFD~45 zZhK@tWK$@Ad8)k$w`t?$=z1?UUoN_s6X)1Ey3TYIm{FM5Nj*H#`zKmOq8P_>2{R}g z!Av7%KFRFYA=*9w{Z)(gs5iX6DRoJ^)IDSf^MVQU`8&DGX02|2b00o`nYNi)!0ptk z2!y79nb=i9!Xa^F2B*UB8k)v7Tj0ZmKEAB&9q!EFIRry}Y;<293Gwp8)md1DK-B&o zGwY?bpRt1-oKZXvS;yC_eW;)Nw7^sz8qzBDY{}$m^NQl<@Ld_F%^h#?W3@;q#z8^y zeak?My+TZIPp8b#Ss#^5>RIpYB56|TE|@sl`~=&Bnvl{EaS<02i9(L8$pib2iXWx> z2HAxDbzBi+%!xxb9#%8U1|I}e8P~$^(KXL5^=mO+dN}wU*3C~Pa73`DI~~s5r$iW? zyj&tZ`bcoSO%ObH4;%-h}kgql$^Cet^C zt0j|miYy(TODL2%#H3|Z13jW&{rQdoC1N^dFT8^eLKd(8u(jta1nQlo{th={U{M^V z%Vf++I2he%u5kL@d-i%(p5@x3Mmlu|^I`6X>CXRwzM_5=5h35j_VfO%%QRTOF|NsJ{f8odOq+S6=T|8i_(KujMnTu( z_O(_W$5(Uv`*E%TRvf!X8GF@#I*7_YnSyo(+?^NWF*tTD><=FO^QZG*cN6^Iuhb2G z)5UNB9T(e2quT1l5*cRr&9hqfn(f)Q8_TgHt&(8i>A7@7kLWD?DEjh z!d$c^Ywalqx(A&1p-oJ`?Zo)^?g* z&SY3TkN9k_GnQw??XgJpD$|5yR;}l^st@Lsz|0)e`WM5`1Mb<1~ifqZwOvc(| z3n5|5V2~|4L*CAL|Ag;3_dd^0&pr3v^ZfKATACXHS;4GybaX%yWBoh-xc^^2y~y+r z(dKjikekm$U*~Q}{zidY8f58tAIj(OTh)QS?uxCnTdXK!S7i4Sq&{T9S2iZ53jddz zM@%`i1Bfk6wxOyJGY??pv9gaEx_b(v{=wQ?jrcE)a?vhu}lVYjW>)z!m+ zcxt#(N9pXu=C#59wogBlH;m10jcN?z-cmOBqn!BS{wE2xX&R?%Gaao4?4Tx)#mfMZSpaz<3g67s-^qt3cYHY z*E7hMqaljPg)}Wt`nmtm68+F6Mpr(mqB6mlkHUqfaiKbBr|y?TX>ws^HG|{K;xUUV z(JJNXcl)R+Os{5Z^eYZ^_@WR2b#4AkH-5&fQ^qK#Gs*Da=xu3wfL=uxruo(Oi)yZ%aklM+Y^2L*={#l z#TK_-(cf*z9c8~1akzRY!{d7A^{tq0c)NPwKK#aiz~;cicCNmhzRT25uOt`MTqs-b zu|0bzms$IW#pSwMoPqV)^f^2v@ z64Yzozauv<+JAq9k=yB2(e4;lmwYVWXXEm~2F(hf3h>uR1+^df-)UbzeRN?*ER|MV5y%!hQ>yw&^J{dR zjcDDSrHdR-d>Z>XCtbtpTy)xkRUtfc)&oP7A+1)yqpT##_umr0Q-;s(u@K)IPPL(s zZNX2R&&htbBIgZihNDsj0ZODFBL{4Fe@EtR3y6KXDE2=K#t5}x<$j{dS zbgsbbj`TT~udAk+VL1|v#rm-#HQKo`g#M_}8rBEi)I=ki#KxJ?P9p1b*`#{O%-dCr zg)tG#GgSHa+^`JA_OA+%-(9YdTEGg!0bK+Ug@BPVi14wCrcKK=gH<$~lMRWV( z#O~Gx6of%_y=2lB9$xFe=(>S!n0+Zy%sPiD$UUV7Zx+>)$l+vP(S%`%>^mRog9<8)Qd>Hc$Z7T*luRb`D;zTNfUvgNlp#3i9Z((j`^@f!OOf+D3>4y zlAU7JO+W~DNZ#_@2FRccYnUh^l{rzVkY@gn{jaJ!Jx%lBzSw6#kyu(}H)v1J;>W6Q zh6r1BrXa4{s$e^$q9t*hpx_VagV9m9p`D~a_y1X6xTrfOk{h7km=mGxtN9d2R!Q%%eiSjwdqx~KXD+9EC4A*a0P9Q+95Wbwf;7N^W!ElBY=>+4guZ$BXBXdsA9ETKiQRScw1KS?_1bs| z4}-_9r8gJ~)kQD4N^!JbOdRutLFooAWSo3XOB6z<8UgHPkIk>6TaDGdOuia-GDZG< zKCE2*Qol(H)YJAH)Iq#5skO5m!Kl;#EFLr;FPdX4WFBJFd7ILKS%eGeMT zh31i%VncQMFy!$8q*_U`N2ApesFrR^5rJy3_#P$vKf#P(sA}$FeX}iU_7rg~svb7Na zXsvOgRbN>SIG3r1d8_;kkOrkAMhJ*@95T*EnfMomUBH1)(9j^>TIF`sRnSA`P-bt= z8jkUmLS0}Du!BeC;GEqZ+avE^r@P0nHn+LhC8wn56MA|7>F?37l|9*}SFJ|Bwb?lB znl+1rrwp9la-Lo4g^8^aN5~9Lw7ivFj~?U(`|gXIdt*^^*hqMI9Q4idi+@J=@I=yh zrTgU}c_%8og(2dXwf!_P`Z!rn((WW?do;iX!{oqD&fl0dvJ?rs+{}4KSK*Sby`zndLM za`+R^cV$Q2FikUZU!-V4sZUFiUVTpGy|F|F{6c>e_f^-4*ZAbBx7ODs(GZ?Z@TXhf zIme%U-0tKdthZ4s9@Yh`k=EUTrWFa=YeX9Mc{* z&h%~*eiCX|>*x0fA{*>C-bB5d@yeB%EL)Zr=GQ!{@3&TbN4t>AyKhw!D#afD`0C$|f|C+Q z{${NPFExBix#Ct!qlw~Up|gddOd^=eT`$_~VrMS&pU9NVaY=nsP12dXiHX4RbX$>b#`8Y03vGe9_O@ZgWaS5;iJpD>i0Djuz> z98>H5cwvVjfnn|S4RLY0{VhCHvzsS`_iQeSuA+zu1k}{@hx$BCCdgUGioxCSPxfHF zy4s_ksthOj8E>btPLgYF{$840T9M(QXy~2f$Vy9*n%Ho^SO_T-&l{yxD=ngWVN`jGsLLLWy^tFiFdiT z+j<+v_IaB$qJPjPi#&iDc)b<(#-iZ0-4P{zOOc;rBk@JoTKGT&k(ClBmO-GjAu@_} zTQ<<=4|gjc469;nDKga6Of8ucVU<|s!s&Kc+Ppy~iBalO+POhjife2L^XIA63pXxE zYwza8kE#=jkBPCx;Yo4Pa`Pu#R3TdDQ({tpQ1E8+Qp6Yjeeu_Cg==$rRcJd9@${o(oYF>Lq>LohH<>q^>ynS#h{tEP2 z;_jf8m6v``0Brw*byY|iwyCvgZ5(W7{n2I-^-vb=MXI@K^EAtN`Bn zllSBFa7LD#6P*~b9TxlPR;h+$PI#f&ncYY8wc%(DgO0tU1=KiW(TVx~yRY?2H*DLc z)CMx1e?(r+F@=Oy>0zz>uFLY!Y(`cgvd(^heBYf~)>G8J36 z#7E;Xs24b53gy)Tex#RT?{i(bdf?V@Vtu0tU0T>1e`ZmH`M9Ul0M)K^<-Bvw}TB#(Y%1J*Fgk@f5>0<$-J8pHruGFOKA=7J0i>FNx&()S4 z?kVPAmKI=AT+E8_!epGQyx-w~ijDc!Uv2^q{2t(J*~m$n*#Htvdat@-`aLXr-u~u! zOP;I1`}$FhfAs0qmF}=>9aLs6>#ZcOho*M?^DMlmx?tl z17yq-r+FbTcaMSEn=q?VKv3zEpMrb8f{WQuN_%l&pAUa*9wx=LT?~&YQ}CSOSymsT z?Dqsca+;YNss6J%Uq0p;rAkd}ia1RyGcsqNeIsq`ZN^(>B%4dyem%YSGD(jsKh3(= z$|S?nqO(#t_k5zdVB*1vcSv}R@6>rVE3ntO|RwpbIZLK{ca`(;;c_d zotZxx0?SeN*Gx4tgTz3+{#zYs&CdCnyu%AfZYsheBTN=r%|TR|pP}G_PM5Ri^ZR^U z1`i227=Zbt1%;}R_xVk4TR2IXQWcjFkRBb^_L_4w{A8c`~ z{{k~_zb5f$`78d-VXM3RZT`@6_t$-Zt0ozk6ML`zd5!wXvn8^}NFZ?f*CR%WN6W;h&`G2^-4;zo8u2 zl$S&&@w5a_VJ8h~)+gJYnbQ9?A%U9ELBq2Rjmh?%Uz&0omNjE*Z~?=yOTy_=G^**C vmr4po^t%P@dyNdw|CpxyzkG1{oUV4+oAv!=n8d%3h|a{oT)$e^G5Y@iLjehh diff --git a/app-indexing/app/src/main/res/drawable-xhdpi/firebase_lockup_400.png b/app-indexing/app/src/main/res/drawable-xhdpi/firebase_lockup_400.png deleted file mode 100644 index 78a4a2780f4caca206ce1065452cc98a36010c9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9439 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 A_y7O^ diff --git a/app-indexing/app/src/main/res/drawable-xxhdpi/firebase_lockup_400.png b/app-indexing/app/src/main/res/drawable-xxhdpi/firebase_lockup_400.png deleted file mode 100644 index 4380835f6a57daa049fdb2dee04e1ff1eeb4ae59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18887 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 bgK6nhfQ)(fNFf-|^ubpFq5jQZM(6$uRss{% diff --git a/app-indexing/app/src/main/res/drawable-xxxhdpi/watermark.png b/app-indexing/app/src/main/res/drawable-xxxhdpi/watermark.png deleted file mode 100644 index 45f1575d240379dc29c8a9f39654cf226e5c0230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8301 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 Wyye`^q(VL{pe6Rp?a~)`fB#=XV()PP diff --git a/app-indexing/app/src/main/res/layout/activity_main.xml b/app-indexing/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 4113746836..0000000000 --- a/app-indexing/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - -