[automerger skipped] Import translations. DO NOT MERGE
am: 21caa6f1d3 -s ours
am skip reason: subject contains skip directive

Change-Id: Id888bed48ac77a605fe027e820a27e0cad2c32b5
diff --git a/Android.mk b/Android.mk
index 879692e..b24a2df 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,9 +5,9 @@
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_STATIC_ANDROID_LIBRARIES := \
-    android-support-v13 \
-    android-support-v4 \
-    android-support-compat
+    androidx.legacy_legacy-support-v13 \
+    androidx.legacy_legacy-support-v4 \
+    androidx.core_core
 
 LOCAL_STATIC_JAVA_LIBRARIES := android-ex-camera2-portability
 LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
@@ -36,6 +36,8 @@
 
 LOCAL_SDK_VERSION := current
 
+LOCAL_PRODUCT_MODULE := true
+
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
 # Guava uses deprecated org.apache.http.legacy classes.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5fb8838..1f13e3e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -6,7 +6,7 @@
 
     <uses-sdk
         android:minSdkVersion="19"
-        android:targetSdkVersion="24" />
+        android:targetSdkVersion="28" />
 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/CleanSpec.mk b/CleanSpec.mk
index dd945b0..8df8308 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -43,8 +43,9 @@
 #$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
 #$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
 #$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
-
-
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Camera2)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libjni_tinyplanet.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib*/libjni_jpegutil.so)
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..ed1d60a
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,3 @@
+# Default code reviewers picked from top 3 or more developers.
+# Please update this list if you find better candidates.
+rtenneti@google.com
diff --git a/jni/Android.mk b/jni/Android.mk
index 8e8de57..bdb4167 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -8,6 +8,7 @@
 LOCAL_SDK_VERSION := 17
 LOCAL_MODULE    := libjni_tinyplanet
 LOCAL_SRC_FILES := tinyplanet.cc
+LOCAL_PRODUCT_MODULE := true
 
 LOCAL_CFLAGS += -ffast-math -O3 -funroll-loops
 LOCAL_CFLAGS += -Wall -Wextra -Werror
@@ -22,6 +23,7 @@
 LOCAL_LDFLAGS   := -llog -ldl -ljnigraphics
 LOCAL_SDK_VERSION := 17
 LOCAL_MODULE    := libjni_jpegutil
+LOCAL_PRODUCT_MODULE := true
 LOCAL_SRC_FILES := jpegutil.cpp jpegutilnative.cpp
 
 LOCAL_STATIC_LIBRARIES := libjpeg_static_ndk
diff --git a/src/com/android/camera/AccessibilityUtil.java b/src/com/android/camera/AccessibilityUtil.java
index 155a149..3b4c8f5 100644
--- a/src/com/android/camera/AccessibilityUtil.java
+++ b/src/com/android/camera/AccessibilityUtil.java
@@ -2,7 +2,7 @@
 
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.content.Context;
-import android.support.v4.view.accessibility.AccessibilityManagerCompat;
+import androidx.core.view.accessibility.AccessibilityManagerCompat;
 import android.view.View;
 import android.view.accessibility.AccessibilityManager;
 import android.widget.Button;
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 3eceb8f..352fa38 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1335,7 +1335,7 @@
 
     private void removeItemAt(int index) {
         mDataAdapter.removeAt(index);
-        if (mDataAdapter.getTotalNumber() > 1) {
+        if (mDataAdapter.getTotalNumber() > 0) {
             showUndoDeletionBar();
         } else {
             // If camera preview is the only view left in filmstrip,
@@ -1503,7 +1503,9 @@
         // version.
         profile.mark();
         try {
-            (new PictureSizeLoader(mAppContext)).computePictureSizes();
+            PictureSizeLoader pictureSizeLoader = new PictureSizeLoader(mAppContext);
+            pictureSizeLoader.computePictureSizes();
+            pictureSizeLoader.release();
         } catch (AssertionError e) {
             Log.e(TAG, "Creating camera controller failed.", e);
             mFatalErrorHandler.onGenericCameraAccessFailure();
diff --git a/src/com/android/camera/SoundPlayer.java b/src/com/android/camera/SoundPlayer.java
index ff3f37f..6e76eb5 100644
--- a/src/com/android/camera/SoundPlayer.java
+++ b/src/com/android/camera/SoundPlayer.java
@@ -17,6 +17,7 @@
 package com.android.camera;
 
 import android.content.Context;
+import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.SoundPool;
 import android.util.SparseIntArray;
@@ -39,8 +40,14 @@
      */
     public SoundPlayer(Context appContext) {
         mAppContext = appContext;
-        final int audioType = getAudioTypeForSoundPool();
-        mSoundPool = new SoundPool(1 /* max streams */, audioType, 0 /* quality */);
+        mSoundPool = new SoundPool.Builder()
+                .setMaxStreams(1)
+                .setAudioAttributes(new AudioAttributes.Builder()
+                        .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
+                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                        .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
+                        .build())
+                .build();
     }
 
     /**
@@ -86,10 +93,4 @@
     public boolean isReleased() {
         return mIsReleased;
     }
-
-    private static int getAudioTypeForSoundPool() {
-        // STREAM_SYSTEM_ENFORCED is hidden API.
-        return ApiHelper.getIntFieldIfExists(AudioManager.class,
-                "STREAM_SYSTEM_ENFORCED", null, AudioManager.STREAM_RING);
-    }
 }
diff --git a/src/com/android/camera/burst/RingBuffer.java b/src/com/android/camera/burst/RingBuffer.java
index 04fa7de..d5090c2 100644
--- a/src/com/android/camera/burst/RingBuffer.java
+++ b/src/com/android/camera/burst/RingBuffer.java
@@ -16,7 +16,7 @@
 
 package com.android.camera.burst;
 
-import android.support.v4.util.LongSparseArray;
+import androidx.collection.LongSparseArray;
 
 import com.android.camera.async.SafeCloseable;
 import com.android.camera.one.v2.camera2proxy.ImageProxy;
diff --git a/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java b/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
index a4b5a9b..031c610 100644
--- a/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
+++ b/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
@@ -34,6 +34,8 @@
 import com.android.camera.util.ApiHelper;
 import com.google.common.base.Optional;
 
+import java.util.Hashtable;
+
 import javax.annotation.Nonnull;
 
 /**
@@ -62,9 +64,19 @@
     }
 
     private final CameraManager mCameraManager;
+    private Hashtable<Facing, String> mCameraFacingCache = new Hashtable<Facing, String>();
 
     public Camera2OneCameraManagerImpl(CameraManager cameraManger) {
         mCameraManager = cameraManger;
+
+        //Camera facing queries depending on camera implementation can be
+        //expensive and involve additional IPC with side effects. Cache front&
+        //back camera ids as early as possible.
+        if (mCameraManager != null) {
+            mCameraFacingCache.clear();
+            findFirstCameraFacing(Facing.BACK);
+            findFirstCameraFacing(Facing.FRONT);
+        }
     }
 
     @Override
@@ -122,11 +134,19 @@
 
     /** Returns the ID of the first camera facing the given direction. */
     private String findCameraId(Facing facing) {
-        if (facing == Facing.FRONT) {
-            return findFirstFrontCameraId();
-        } else {
-            return findFirstBackCameraId();
+        String id = mCameraFacingCache.get(facing);
+        if (id != null) {
+            return id;
         }
+
+        if (facing == Facing.FRONT) {
+            id = findFirstFrontCameraId();
+        } else {
+            id = findFirstBackCameraId();
+        }
+
+        mCameraFacingCache.put(facing, id);
+        return id;
     }
 
     /** Returns the ID of the first back-facing camera. */
diff --git a/src/com/android/camera/one/v2/OneCameraZslImpl.java b/src/com/android/camera/one/v2/OneCameraZslImpl.java
index 6bdad44..5464ab8 100644
--- a/src/com/android/camera/one/v2/OneCameraZslImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraZslImpl.java
@@ -39,7 +39,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.SystemClock;
-import android.support.v4.util.Pools;
+import androidx.core.util.Pools;
 import android.view.Surface;
 
 import com.android.camera.CaptureModuleUtil;
diff --git a/src/com/android/camera/one/v2/autofocus/TriggerStateMachine.java b/src/com/android/camera/one/v2/autofocus/TriggerStateMachine.java
index 95d2523..86721ac 100644
--- a/src/com/android/camera/one/v2/autofocus/TriggerStateMachine.java
+++ b/src/com/android/camera/one/v2/autofocus/TriggerStateMachine.java
@@ -17,7 +17,7 @@
 package com.android.camera.one.v2.autofocus;
 
 import android.hardware.camera2.CaptureResult;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
 
 import com.android.camera.async.Updatable;
 
diff --git a/src/com/android/camera/one/v2/photo/zsl/ZslImageCaptureCommand.java b/src/com/android/camera/one/v2/photo/zsl/ZslImageCaptureCommand.java
index 4b8e8fc..cb4edd7 100644
--- a/src/com/android/camera/one/v2/photo/zsl/ZslImageCaptureCommand.java
+++ b/src/com/android/camera/one/v2/photo/zsl/ZslImageCaptureCommand.java
@@ -17,7 +17,7 @@
 package com.android.camera.one.v2.photo.zsl;
 
 import android.hardware.camera2.CameraAccessException;
-import android.support.v4.util.Pair;
+import androidx.core.util.Pair;
 
 import com.android.camera.async.BufferQueue;
 import com.android.camera.async.Updatable;
diff --git a/src/com/android/camera/processing/ProcessingService.java b/src/com/android/camera/processing/ProcessingService.java
index c67ebd6..1e48095 100644
--- a/src/com/android/camera/processing/ProcessingService.java
+++ b/src/com/android/camera/processing/ProcessingService.java
@@ -27,7 +27,7 @@
 import android.os.PowerManager;
 import android.os.PowerManager.WakeLock;
 import android.os.Process;
-import android.support.v4.content.LocalBroadcastManager;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 
 import com.android.camera.app.CameraServices;
 import com.android.camera.app.CameraServicesImpl;
diff --git a/src/com/android/camera/settings/AppUpgrader.java b/src/com/android/camera/settings/AppUpgrader.java
index 92bd953..930c3e2 100644
--- a/src/com/android/camera/settings/AppUpgrader.java
+++ b/src/com/android/camera/settings/AppUpgrader.java
@@ -145,6 +145,7 @@
             // chooser if applicable.
             settingsManager.remove(SettingsManager.SCOPE_GLOBAL,
                     Keys.KEY_STARTUP_MODULE_INDEX);
+            CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.API_1);
         }
 
         if (lastVersion < CAMERA_MODULE_SETTINGS_FILES_RENAMED_VERSION) {
diff --git a/src/com/android/camera/settings/CameraSettingsActivity.java b/src/com/android/camera/settings/CameraSettingsActivity.java
index 50641fd..0429092 100644
--- a/src/com/android/camera/settings/CameraSettingsActivity.java
+++ b/src/com/android/camera/settings/CameraSettingsActivity.java
@@ -29,7 +29,7 @@
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
-import android.support.v4.app.FragmentActivity;
+import androidx.fragment.app.FragmentActivity;
 import android.view.MenuItem;
 
 import com.android.camera.FatalErrorHandler;
@@ -180,6 +180,7 @@
             mInfos = CameraAgentFactory
                     .getAndroidCameraAgent(context, CameraAgentFactory.CameraApi.API_1)
                     .getCameraDeviceInfo();
+            CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.API_1);
         }
 
         @Override
@@ -498,6 +499,7 @@
             }
             PictureSizeLoader loader = new PictureSizeLoader(getActivity().getApplicationContext());
             mPictureSizes = loader.computePictureSizes();
+            loader.release();
         }
 
         /**
diff --git a/src/com/android/camera/settings/PictureSizeLoader.java b/src/com/android/camera/settings/PictureSizeLoader.java
index a3cb49b..582d77f 100644
--- a/src/com/android/camera/settings/PictureSizeLoader.java
+++ b/src/com/android/camera/settings/PictureSizeLoader.java
@@ -97,6 +97,10 @@
         mCachedOnly = cachedOnly;
     }
 
+    public void release(){
+        CameraAgentFactory.recycle(CameraAgentFactory.CameraApi.API_1);
+    }
+
     /**
      * Computes the list of picture sizes that should be displayed by settings.
      * <p>
diff --git a/src/com/android/camera/util/AndroidContext.java b/src/com/android/camera/util/AndroidContext.java
index 6fc50c4..72f3478 100644
--- a/src/com/android/camera/util/AndroidContext.java
+++ b/src/com/android/camera/util/AndroidContext.java
@@ -17,7 +17,7 @@
 package com.android.camera.util;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * Initializable singleton for providing the application level context
diff --git a/version.mk b/version.mk
index 3424b9d..9c3997e 100644
--- a/version.mk
+++ b/version.mk
@@ -88,7 +88,7 @@
 ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
   git_hash := $(shell git --git-dir $(LOCAL_PATH)/.git log -n 1 --pretty=format:%h)
   date_string := $$(date +%m%d%y_%H%M%S)
-  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(USER).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
+  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(BUILD_USERNAME).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
 else
   version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER_FROM_FILE)-$(base_version_arch)$(base_version_density))
 endif