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

Change-Id: I2c12739b6d25ca2767a3d13a15cf5de2fc70b4ee
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 59733ab..20fdf24 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -270,7 +270,7 @@
     <string name="time_lapse_seconds" msgid="7319683099532506270">"Broj sekundi:"</string>
     <string name="time_lapse_minutes" msgid="5325447383033224679">"Broj minuta:"</string>
     <string name="time_lapse_hours" msgid="5294001144133261436">"Broj sati:"</string>
-    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Gotovo"</string>
+    <string name="time_lapse_interval_set" msgid="2418594453248958440">"Završeno"</string>
     <string name="set_time_interval" msgid="2531393962847535331">"Postaviti vremenski interval"</string>
     <string name="set_time_interval_help" msgid="64145154088021389">"Funkcija protoka vremena je isključena. Uključite je kako biste postavili vremenski interval."</string>
     <string name="set_duration" msgid="1638453882581604341">"Postaviti tajmer u sekundama"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 0016ddb..f73580e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -156,7 +156,7 @@
     <string name="pref_camera_hdr_label" msgid="1918040375414771185">"HDR"</string>
     <string name="pref_camera_id_label_back" msgid="1645608049757733858">"Kamera auf der Vorderseite"</string>
     <string name="pref_camera_id_label_front" msgid="349308803062874842">"Kamera auf der Rückseite"</string>
-    <string name="dialog_ok" msgid="774141340500181131">"Ok"</string>
+    <string name="dialog_ok" msgid="774141340500181131">"OK"</string>
     <string name="dialog_cancel" msgid="692365061128351656">"Abbrechen"</string>
     <string name="dialog_report" msgid="7616428760369876209">"Feedback"</string>
     <string name="dialog_dismiss" msgid="1382550604990470119">"Schließen"</string>
@@ -373,7 +373,7 @@
     <string name="share_to" msgid="5144911209144798122">"Teilen über"</string>
     <string name="edit_with" msgid="615569327230783971">"Bearbeiten mit"</string>
     <string name="startup_dialog_button_next" msgid="1011831256978228993">"Weiter"</string>
-    <string name="confirm_button_text" msgid="7389949384482206814">"Ok"</string>
+    <string name="confirm_button_text" msgid="7389949384482206814">"OK"</string>
     <string name="full_sensor_4x3_aspect_ratio" msgid="1270461419743888925">"Ergebnis beibehalten \n(4:3)"</string>
     <string name="cropped_sensor_16x9_aspect_ratio" msgid="4742161537633251795">"Ergebnis zuschneiden \n(16:9)"</string>
     <string name="pref_boolean_false" msgid="461317129020087333">"0"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index d7e485f..7680ecf 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -58,7 +58,7 @@
     <string name="iso" msgid="8578773821062054902">"ISO"</string>
     <string name="unit_mm" msgid="5210344300697638286">"मिमी"</string>
     <string name="manual" msgid="2444400953521760140">"विवरण पुस्तिका"</string>
-    <string name="auto" msgid="2552649885114400474">"अपने आप"</string>
+    <string name="auto" msgid="2552649885114400474">"स्वतः"</string>
     <string name="flash_on" msgid="6573457197393807642">"फ़्लैश चलाया गया"</string>
     <string name="flash_off" msgid="7889323512830926273">"कोई फ़्लैश नहीं"</string>
     <string name="unknown" msgid="564184550182858146">"अज्ञात"</string>
@@ -98,15 +98,15 @@
     <string name="pref_camera_picturesize_entry_medium" msgid="7708839551627003154">"मध्यम"</string>
     <string name="pref_camera_picturesize_entry_small" msgid="2991239656622539068">"छोटा"</string>
     <string name="pref_camera_focusmode_title" msgid="3637702747984180030">"फ़ोकस मोड"</string>
-    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"अपने आप"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="8977409813328199501">"स्वतः"</string>
     <string name="pref_camera_focusmode_entry_infinity" msgid="3887667853236656322">"अनंत"</string>
     <string name="pref_camera_focusmode_entry_macro" msgid="7632276686726851426">"मैक्रो"</string>
-    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"अपने-आप"</string>
+    <string name="pref_camera_focusmode_label_auto" msgid="4884418453600317694">"स्वत:"</string>
     <string name="pref_camera_focusmode_label_infinity" msgid="1673352016120343314">"अनंत"</string>
     <string name="pref_camera_focusmode_label_macro" msgid="5065639298027996399">"मैक्रो"</string>
     <string name="pref_camera_flashmode_title" msgid="8363803841022314574">"फ़्लैश मोड"</string>
     <string name="pref_camera_flashmode_label" msgid="5852483713534762800">"फ़्लैश मोड"</string>
-    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"अपने आप"</string>
+    <string name="pref_camera_flashmode_entry_auto" msgid="4211992591841657014">"स्वतः"</string>
     <string name="pref_camera_flashmode_entry_on" msgid="3519831202665377698">"चालू"</string>
     <string name="pref_camera_flashmode_entry_off" msgid="8861322265566617357">"बंद"</string>
     <string name="pref_camera_flashmode_label_auto" msgid="2309144918900450379">"फ़्लैश अपनेआप:"</string>
@@ -114,18 +114,18 @@
     <string name="pref_camera_flashmode_label_off" msgid="7175863901446001441">"फ़्लैश बंद"</string>
     <string name="pref_camera_whitebalance_title" msgid="7962809566612868179">"श्वेत संतुलन"</string>
     <string name="pref_camera_whitebalance_label" msgid="7370366644738746700">"श्वेत संतुलन"</string>
-    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"अपने आप"</string>
+    <string name="pref_camera_whitebalance_entry_auto" msgid="1390631794449502796">"स्वतः"</string>
     <string name="pref_camera_whitebalance_entry_incandescent" msgid="1140391575294372706">"अत्यधिक चमकीला"</string>
     <string name="pref_camera_whitebalance_entry_daylight" msgid="757833578153467254">"दिन का प्रकाश"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="5157027611220790970">"फ़्लोरेसेंट"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3569589102226796875">"धुंधला"</string>
-    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"अपने-आप"</string>
+    <string name="pref_camera_whitebalance_label_auto" msgid="4305837287360485369">"स्वत:"</string>
     <string name="pref_camera_whitebalance_label_incandescent" msgid="2860805668879945185">"अत्यधिक चमकीला"</string>
     <string name="pref_camera_whitebalance_label_daylight" msgid="4562002095198912409">"दिन का प्रकाश"</string>
     <string name="pref_camera_whitebalance_label_fluorescent" msgid="10552295745391742">"फ़्लोरेसेंट"</string>
     <string name="pref_camera_whitebalance_label_cloudy" msgid="4880793739075193336">"धुंधला"</string>
     <string name="pref_camera_scenemode_title" msgid="5709932164781367066">"दृश्य मोड"</string>
-    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"अपने आप"</string>
+    <string name="pref_camera_scenemode_entry_auto" msgid="9205644316260850379">"स्वतः"</string>
     <string name="pref_camera_scenemode_entry_hdr_plus" msgid="6759085555519758794">"HDR+"</string>
     <string name="pref_camera_scenemode_entry_hdr" msgid="3098836808080630955">"HDR"</string>
     <string name="pref_camera_scenemode_entry_turn_hdr_plus_on" msgid="1096746750342289067">"HDR+ चालू"</string>
@@ -279,7 +279,7 @@
     <string name="remember_location_prompt" msgid="3006013504489919474">"अपनी फ़ोटो और वीडियो उन स्‍थानों के साथ टैग करें जहां वे लिए गए हैं."</string>
     <string name="remember_location_no" msgid="4412802756840226925">"नहीं,रहने दें"</string>
     <string name="remember_location_yes" msgid="4339424460683531388">"हां"</string>
-    <string name="camera_menu_more_label" msgid="7951917844735828365">"ज़्यादा विकल्प"</string>
+    <string name="camera_menu_more_label" msgid="7951917844735828365">"अधिक विकल्प"</string>
     <string name="camera_menu_settings_label" msgid="3862756725328016822">"सेटिंग"</string>
     <string name="create_tiny_planet" msgid="5186918191372107343">"छोटा ग्रह बनाएं"</string>
     <string name="saving_tiny_planet" msgid="8828265180177375494">"छोटा ग्रह सहेजा जा रहा है …"</string>
@@ -313,7 +313,7 @@
     <string name="flash_auto_desc" msgid="3009043125539675717">"फ़्लैश ऑटो"</string>
     <string name="flash_on_desc" msgid="930372145324854699">"फ़्लैश चालू"</string>
     <string name="hdr_plus_flash_off_desc" msgid="5335888906983788789">"HDR+ फ़्लैश बंद"</string>
-    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ फ़्लैशअपने-आप"</string>
+    <string name="hdr_plus_flash_auto_desc" msgid="4812200236263011537">"HDR+ फ़्लैश स्वत:"</string>
     <string name="hdr_plus_flash_on_desc" msgid="8323389161987561284">"HDR+ फ़्लैश चालू"</string>
     <string name="torch_on_desc" msgid="3069836196559213365">"टॉर्च चालू"</string>
     <string name="torch_off_desc" msgid="8304675202998742618">"टॉर्च बंद"</string>
@@ -324,7 +324,7 @@
     <string name="countdown_timer_off" msgid="1663008439564495948">"काउंटडाउन टाइमर बंद है"</string>
     <string name="countdown_timer_duration_3s" msgid="7435393834886072664">"काउंटडाउन टाइमर अवधि 3 सेकंड पर सेट है"</string>
     <string name="countdown_timer_duration_10s" msgid="9085308782250002795">"काउंटडाउन टाइमर अवधि 10 सेकंड पर सेट है"</string>
-    <string name="more_options_desc" msgid="4628738800610478353">"ज़्यादा विकल्प"</string>
+    <string name="more_options_desc" msgid="4628738800610478353">"अधिक विकल्प"</string>
     <string name="cancel_button_description" msgid="3801167024006905033">"अभी नहीं"</string>
     <string name="done_button_description" msgid="1334963435441544592">"पूर्ण"</string>
     <string name="retake_button_description" msgid="4234613030674787714">"फिर से लें"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 9fb506f..a9ab833 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -87,7 +87,7 @@
     <!-- no translation found for pref_camera_timer_sound_default (6225207881203007747) -->
     <skip />
     <string name="pref_camera_timer_sound_title" msgid="9036987234878551217">"Bip conto alla rov."</string>
-    <string name="setting_off" msgid="6782191065550276632">"Off"</string>
+    <string name="setting_off" msgid="6782191065550276632">"OFF"</string>
     <string name="setting_on" msgid="9086728135773197891">"ON"</string>
     <string name="pref_video_quality_title" msgid="5887153490982738588">"Qualità video"</string>
     <string name="pref_video_time_lapse_frame_interval_title" msgid="4975260837607993569">"Time-lapse"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1727e93..41e4633 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -62,7 +62,7 @@
     <string name="flash_on" msgid="6573457197393807642">"フラッシュON"</string>
     <string name="flash_off" msgid="7889323512830926273">"フラッシュOFF"</string>
     <string name="unknown" msgid="564184550182858146">"不明"</string>
-    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"このアイテムはデバイスに保存され、オフラインで利用できます。"</string>
+    <string name="try_to_set_local_album_available_offline" msgid="3363125545009254117">"このアイテムは端末に保存され、オフラインで利用できます。"</string>
     <string name="please_wait" msgid="1416313324505140068">"お待ちください"</string>
     <string name="camera_error_title" msgid="6200558085072670067">"カメラエラー"</string>
     <string name="error_cannot_connect_camera" msgid="2713059773224193128">"カメラに接続できません。"</string>
@@ -76,7 +76,7 @@
     <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SDカードにアクセスできませんでした。"</string>
     <string name="time_lapse_title" msgid="3267978566401228497">"低速度撮影"</string>
     <string name="feedback_description_camera_access" msgid="419090951070170132">"アプリをカメラに接続できませんでした"</string>
-    <string name="feedback_description_save_photo" msgid="8658767358989083228">"写真または動画はデバイスに保存されませんでした。"</string>
+    <string name="feedback_description_save_photo" msgid="8658767358989083228">"写真または動画は端末に保存されませんでした。"</string>
     <string name="capturing" msgid="5255164204641920893">"キャプチャしています"</string>
     <string name="pref_camera_id_title" msgid="4680648115225411185">"カメラを選択"</string>
     <string name="pref_camera_id_entry_back" msgid="6386943973628160510">"戻る"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index b094d4a..17a078d 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -348,7 +348,7 @@
     <string name="setting_default_camera" msgid="6954076799301004779">"Бастапқы камера"</string>
     <string name="setting_google_help_and_feedback" msgid="2079580537079242775">"Анықтама және кері байл."</string>
     <string name="processing_hdr_plus" msgid="9160093263037540304">"HDR+ өңделуде …"</string>
-    <string name="open_source_licenses" msgid="2169711954264883060">"Ашық кодты бағдарлама лицензиялары"</string>
+    <string name="open_source_licenses" msgid="2169711954264883060">"Ашық бастапқы код лицензиялары"</string>
     <string name="pref_category_general" msgid="6737748849700581019">"Жалпы параметрлер"</string>
     <string name="pref_category_resolution_quality" msgid="6641462402321962896">"Ажыратымдылық және сапа"</string>
     <string name="pref_category_about" msgid="1966255405679342337">"Туралы"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 4224788..d48cd3c 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -75,7 +75,7 @@
     <string name="preparing_sd" product="default" msgid="7435693655017362767">"SD கார்டைத் தயார் செய்கிறது..."</string>
     <string name="access_sd_fail" product="default" msgid="2634861611082499811">"SD கார்டை அணுக முடியவில்லை."</string>
     <string name="time_lapse_title" msgid="3267978566401228497">"இடைவெளிக்கான நேரம் பதிவாகிறது"</string>
-    <string name="feedback_description_camera_access" msgid="419090951070170132">"ஆப்ஸை கேமராவுடன் இணைக்க முடியவில்லை"</string>
+    <string name="feedback_description_camera_access" msgid="419090951070170132">"பயன்பாட்டை கேமராவுடன் இணைக்க முடியவில்லை"</string>
     <string name="feedback_description_save_photo" msgid="8658767358989083228">"சாதனத்தில் படம் அல்லது வீடியோ சேமிக்கப்படவில்லை."</string>
     <string name="capturing" msgid="5255164204641920893">"படமெடுக்கிறது"</string>
     <string name="pref_camera_id_title" msgid="4680648115225411185">"கேமராவைத் தேர்வுசெய்க"</string>
@@ -190,7 +190,7 @@
     <string name="effect_background" msgid="1358432220077975015">"பின்புலம்"</string>
     <string name="accessibility_shutter_button" msgid="6040483605347230438">"ஷட்டர்"</string>
     <string name="accessibility_cancel_button" msgid="5679989494636116448">"ரத்துசெய்"</string>
-    <string name="accessibility_menu_button" msgid="7692103503958544723">"மெனு பட்டன்"</string>
+    <string name="accessibility_menu_button" msgid="7692103503958544723">"மெனு பொத்தான்"</string>
     <string name="accessibility_check_box" msgid="1084094675439953723">"%1$s செக் பாக்ஸ்"</string>
     <string name="accessibility_switch_to_camera" msgid="4518394037216725274">"படத்திற்கு மாறு"</string>
     <string name="accessibility_switch_to_video" msgid="8174781871592793967">"வீடியோவிற்கு மாறு"</string>
@@ -339,7 +339,7 @@
     <string name="exposure_compensation_desc_0" msgid="2820273752287040523">"எக்ஸ்போஷரைச் சரிசெய்தல் 0"</string>
     <string name="exposure_compensation_desc_p1" msgid="2328275401634452554">"எக்ஸ்போஷரைச் சரிசெய்தல் +1"</string>
     <string name="exposure_compensation_desc_p2" msgid="4555277824096107142">"எக்ஸ்போஷரைச் சரிசெய்தல் +2"</string>
-    <string name="button_change_announcement" msgid="3759686152778772111">"பட்டன் இப்போது %s இல் உள்ளது"</string>
+    <string name="button_change_announcement" msgid="3759686152778772111">"பொத்தான் இப்போது %s இல் உள்ளது"</string>
     <string name="setting_location" msgid="4459859689227893838">"இருப்பிடம்"</string>
     <string name="setting_back_camera_photo" msgid="256738900473265017">"பின்புற கேமரா படம்"</string>
     <string name="setting_back_camera_video" msgid="5220819479408164689">"பின்புற கேமரா வீடியோ"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index af21653..41305a7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -212,7 +212,7 @@
     <string name="photo_date_content_description" msgid="5705865897898465619">"%s 拍攝的相片"</string>
     <string name="video_date_content_description" msgid="2151884014634284456">"%s 拍攝的影片"</string>
     <string name="panorama_date_content_description" msgid="990703578639006144">"%s 拍攝的全景相片"</string>
-    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s 拍攝的 全景相片"</string>
+    <string name="photosphere_date_content_description" msgid="4183741743409007876">"%s 拍攝的 Photo Sphere 全景相片"</string>
     <string name="refocus_date_content_description" msgid="5630960320424345547">"%s 拍攝的鏡頭模糊相片"</string>
     <string name="media_processing_content_description" msgid="8138587719107183754">"正在處理的媒體項目"</string>
     <string name="accessibility_mode_list_toggle" msgid="4784230103566918645">"切換模式清單"</string>
diff --git a/src/com/android/camera/async/Futures2.java b/src/com/android/camera/async/Futures2.java
index 6669132..052c722 100644
--- a/src/com/android/camera/async/Futures2.java
+++ b/src/com/android/camera/async/Futures2.java
@@ -20,6 +20,7 @@
 import com.google.common.util.concurrent.ForwardingListenableFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.List;
 
@@ -96,7 +97,7 @@
         // allAsList will propagate the failures instead of null values to the
         // parameters of the supplied function.
         ListenableFuture<List<Object>> result = Futures.<Object>allAsList(futures);
-        return Futures.transform(result, new AsyncFunction<List<Object>, TResult>() {
+        return Futures.transformAsync(result, new AsyncFunction<List<Object>, TResult>() {
             @Override
             public ListenableFuture<TResult> apply(@Nullable List<Object> list) throws Exception {
                 T1 value1 = (T1) list.get(0);
@@ -104,7 +105,7 @@
 
                 return fn.apply(value1, value2);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
@@ -141,7 +142,7 @@
         // allAsList will propagate the failures instead of null values to the
         // parameters of the supplied function.
         ListenableFuture<List<Object>> result = Futures.<Object>allAsList(futures);
-        return Futures.transform(result, new AsyncFunction<List<Object>, TResult>() {
+        return Futures.transformAsync(result, new AsyncFunction<List<Object>, TResult>() {
             @Override
             public ListenableFuture<TResult> apply(@Nullable List<Object> list) throws Exception {
                 T1 value1 = (T1) list.get(0);
@@ -150,7 +151,7 @@
 
                 return fn.apply(value1, value2, value3);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/async/Observables.java b/src/com/android/camera/async/Observables.java
index e946fee..0fbfc6c 100644
--- a/src/com/android/camera/async/Observables.java
+++ b/src/com/android/camera/async/Observables.java
@@ -114,6 +114,6 @@
             public void run() {
                 callback.update(observable.get());
             }
-        }, MoreExecutors.sameThreadExecutor());
+        }, MoreExecutors.directExecutor());
     }
 }
diff --git a/src/com/android/camera/one/OneCameraCharacteristics.java b/src/com/android/camera/one/OneCameraCharacteristics.java
index 24584da..27504a2 100644
--- a/src/com/android/camera/one/OneCameraCharacteristics.java
+++ b/src/com/android/camera/one/OneCameraCharacteristics.java
@@ -135,6 +135,11 @@
     public boolean isAutoFocusSupported();
 
     /**
+     * @return true if this camera supports continuous picture autofocus.
+     */
+    public boolean isContinuousPictureAutoFocusSupported();
+
+    /**
      * @return true if this camera supports custom AutoExposure regions.
      */
     public boolean isAutoExposureSupported();
diff --git a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
index b14e66e..c525b57 100644
--- a/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
+++ b/src/com/android/camera/one/v1/OneCameraCharacteristicsImpl.java
@@ -176,6 +176,11 @@
     }
 
     @Override
+    public boolean isContinuousPictureAutoFocusSupported() {
+        return getCameraDirection() == Facing.BACK;
+    }
+
+    @Override
     public boolean isAutoExposureSupported() {
         // Custom AE is only supported on the back camera for legacy devices.
         return getCameraDirection() == Facing.BACK;
diff --git a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
index f7a2b7e..77e9a81 100644
--- a/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraCharacteristicsImpl.java
@@ -244,6 +244,20 @@
     }
 
     @Override
+    public boolean isContinuousPictureAutoFocusSupported() {
+        int[] availableAfModes =
+                mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
+        boolean continuousPictureAfModeAvailable = false;
+        for (int i = 0; i < availableAfModes.length; i++) {
+            if (availableAfModes[i] == CameraCharacteristics.CONTROL_AF_MODE_CONTINUOUS_PICTURE) {
+                continuousPictureAfModeAvailable = true;
+                break;
+            }
+        }
+        return  isAutoFocusSupported() && continuousPictureAfModeAvailable;
+    }
+
+    @Override
     public boolean isAutoExposureSupported() {
         Integer maxAeRegions = mCameraCharacteristics.get(
               CameraCharacteristics.CONTROL_MAX_REGIONS_AE);
diff --git a/src/com/android/camera/one/v2/OneCameraImpl.java b/src/com/android/camera/one/v2/OneCameraImpl.java
index d4c7cba..c3b8ecb 100644
--- a/src/com/android/camera/one/v2/OneCameraImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraImpl.java
@@ -71,6 +71,7 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -512,7 +513,7 @@
             public void onFailure(Throwable throwable) {
                 captureParams.callback.onPictureSaved(null);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/one/v2/OneCameraZslImpl.java b/src/com/android/camera/one/v2/OneCameraZslImpl.java
index 5464ab8..a35a6c1 100644
--- a/src/com/android/camera/one/v2/OneCameraZslImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraZslImpl.java
@@ -71,6 +71,7 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.nio.ByteBuffer;
 import java.security.InvalidParameterException;
@@ -649,7 +650,7 @@
             public void onFailure(Throwable throwable) {
                 captureParams.callback.onPictureSaved(null);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java b/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
index 3dc5d65..ef9baa5 100644
--- a/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
@@ -19,6 +19,7 @@
 import android.graphics.Rect;
 import android.media.Image;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 
@@ -203,7 +204,7 @@
 
     @Override
     public String toString() {
-        return Objects.toStringHelper(this)
+        return MoreObjects.toStringHelper(this)
                 .add("format", getFormat())
                 .add("timestamp", getTimestamp())
                 .add("width", getWidth())
diff --git a/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java b/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
index 8a59c83..e4c0638 100644
--- a/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
@@ -21,7 +21,7 @@
 import android.os.Handler;
 import android.view.Surface;
 
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -160,9 +160,9 @@
 
     @Override
     public String toString() {
-        Objects.ToStringHelper tsh;
+        MoreObjects.ToStringHelper tsh;
         synchronized (mLock) {
-            tsh = Objects.toStringHelper(mDelegate);
+            tsh = MoreObjects.toStringHelper(mDelegate);
         }
         return tsh.add("width", getWidth())
                 .add("height", getHeight())
diff --git a/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java b/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
index 545ff60..98d972e 100644
--- a/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
@@ -19,6 +19,7 @@
 import android.graphics.Rect;
 import android.media.Image;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 
 import java.util.List;
@@ -102,7 +103,7 @@
 
     @Override
     public String toString() {
-        return Objects.toStringHelper(this)
+        return MoreObjects.toStringHelper(this)
                 .add("timestamp", getTimestamp())
                 .add("width", getWidth())
                 .add("height", getHeight())
diff --git a/src/com/android/camera/one/v2/common/BasicCameraFactory.java b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
index 2cd4098..44883ea 100644
--- a/src/com/android/camera/one/v2/common/BasicCameraFactory.java
+++ b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
@@ -87,8 +87,12 @@
             Observable<Boolean> hdrSceneSetting,
             int templateType) {
         RequestTemplate requestTemplate = new RequestTemplate(rootTemplate);
-        requestTemplate.setParam(
-              CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+        if (cameraCharacteristics.isContinuousPictureAutoFocusSupported()) {
+            requestTemplate.setParam(
+                    CaptureRequest.CONTROL_AF_MODE,
+                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
+        }
+
         requestTemplate.setParam(
               CaptureRequest.CONTROL_AE_MODE, new FlashBasedAEMode(flash, hdrSceneSetting));
         requestTemplate.setParam(
@@ -126,16 +130,16 @@
         // Also, de-register these callbacks when the camera is closed (to
         // not leak memory).
         SafeCloseable zoomCallback = zoom.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(zoomCallback);
         SafeCloseable flashCallback = flash.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(flashCallback);
         SafeCloseable exposureCallback = exposure.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(exposureCallback);
         SafeCloseable hdrCallback = hdrSceneSetting.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(hdrCallback);
 
         int sensorOrientation = cameraCharacteristics.getSensorOrientation();
diff --git a/src/com/android/camera/one/v2/common/PictureSizeCalculator.java b/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
index eb25be0..8f2fb6a 100644
--- a/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
+++ b/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
@@ -22,6 +22,7 @@
 import com.android.camera.one.OneCameraCharacteristics;
 import com.android.camera.util.AspectRatio;
 import com.android.camera.util.Size;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
@@ -76,7 +77,7 @@
 
         @Override
         public String toString() {
-            return Objects.toStringHelper("PictureSizeCalculator.Configuration")
+            return MoreObjects.toStringHelper("PictureSizeCalculator.Configuration")
                     .add("native size", mSize)
                     .add("crop", mPostCrop)
                     .toString();
diff --git a/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java b/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
index f966bfd..472378f 100644
--- a/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
+++ b/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
@@ -35,6 +35,7 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.concurrent.Executor;
 
@@ -159,7 +160,7 @@
             public void onFailure(@Nonnull Throwable throwable) {
                 listener.onSetupFailed();
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     @Override
diff --git a/src/com/android/camera/one/v2/initialization/PreviewStarter.java b/src/com/android/camera/one/v2/initialization/PreviewStarter.java
index 99c34a3..17a0966 100644
--- a/src/com/android/camera/one/v2/initialization/PreviewStarter.java
+++ b/src/com/android/camera/one/v2/initialization/PreviewStarter.java
@@ -24,6 +24,7 @@
 import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -82,7 +83,7 @@
         final ListenableFuture<CameraCaptureSessionProxy> sessionFuture =
                 mCaptureSessionCreator.createCaptureSession(surfaceList);
 
-        return Futures.transform(sessionFuture,
+        return Futures.transformAsync(sessionFuture,
                 new AsyncFunction<CameraCaptureSessionProxy, Void>() {
                     @Override
                     public ListenableFuture<Void> apply(
@@ -90,6 +91,6 @@
                         mSessionListener.onCameraCaptureSessionCreated(captureSession, surface);
                         return Futures.immediateFuture(null);
                     }
-                });
+                }, MoreExecutors.directExecutor());
     }
 }
diff --git a/src/com/android/camera/one/v2/photo/PictureTakerImpl.java b/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
index 13498c7..59245da 100644
--- a/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
+++ b/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
@@ -28,7 +28,7 @@
 import com.android.camera.one.v2.core.ResourceAcquisitionFailedException;
 import com.android.camera.one.v2.imagesaver.ImageSaver;
 import com.android.camera.session.CaptureSession;
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 
 class PictureTakerImpl implements PictureTaker {
     private final MainThread mMainExecutor;
@@ -70,7 +70,7 @@
 
         @Override
         public String toString() {
-            return Objects.toStringHelper(this)
+            return MoreObjects.toStringHelper(this)
                     .add("command", mCommand)
                     .toString();
         }
diff --git a/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java b/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
index 8500ebe..5be9032 100644
--- a/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
+++ b/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
@@ -25,6 +25,7 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 
 import java.util.HashMap;
@@ -81,7 +82,7 @@
             public void onFailure(Throwable throwable) {
                 throw new UnsupportedOperationException();
             }
-        });
+        }, MoreExecutors.directExecutor());
         return Futures2.nonCancellationPropagating(future);
     }
 
diff --git a/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java b/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
index 1530c48..11350f2 100644
--- a/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
+++ b/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
@@ -51,7 +51,7 @@
             public void run() {
                 ringBuffer.setMaxSize(Math.max(0, maxRingBufferSize.get()));
             }
-        }, MoreExecutors.sameThreadExecutor()));
+        }, MoreExecutors.directExecutor()));
         ringBuffer.setMaxSize(Math.max(0, maxRingBufferSize.get()));
 
         mOutputTicketPool = ringBuffer;
diff --git a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
index 2e5976c..c87eab8 100644
--- a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
+++ b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
@@ -39,6 +39,7 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -355,7 +356,7 @@
             @Override
             public void onFailure(Throwable throwable) {
             }
-        });
+        }, MoreExecutors.directExecutor());
 
         final ListenableFuture<TotalCaptureResultProxy> requestMetadata = img.metadata;
         // If TotalCaptureResults are available add them to the capture event.