diff --git a/README.md b/README.md
index 6a563dfd8..15ba3d04b 100644
--- a/README.md
+++ b/README.md
@@ -20,15 +20,15 @@
 
 ## Screenshots
 
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png)
-[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png)
+[<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png)
 [<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png" width=160>](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png)
 [<img src="fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png" width=405>](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png)
 [<img src="fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png" width=405>](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 0e4d07179..d6a656a29 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -98,35 +98,54 @@ public abstract class BasePlayer implements
         Player.EventListener, PlaybackListener, ImageLoadingListener {
 
     public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
-    @NonNull public static final String TAG = "BasePlayer";
+    @NonNull
+    public static final String TAG = "BasePlayer";
 
-    @NonNull final protected Context context;
+    @NonNull
+    final protected Context context;
 
-    @NonNull final protected BroadcastReceiver broadcastReceiver;
-    @NonNull final protected IntentFilter intentFilter;
+    @NonNull
+    final protected BroadcastReceiver broadcastReceiver;
+    @NonNull
+    final protected IntentFilter intentFilter;
 
-    @NonNull final protected HistoryRecordManager recordManager;
+    @NonNull
+    final protected HistoryRecordManager recordManager;
 
-    @NonNull final protected CustomTrackSelector trackSelector;
-    @NonNull final protected PlayerDataSource dataSource;
+    @NonNull
+    final protected CustomTrackSelector trackSelector;
+    @NonNull
+    final protected PlayerDataSource dataSource;
 
-    @NonNull final private LoadControl loadControl;
-    @NonNull final private RenderersFactory renderFactory;
+    @NonNull
+    final private LoadControl loadControl;
+    @NonNull
+    final private RenderersFactory renderFactory;
 
-    @NonNull final private SerialDisposable progressUpdateReactor;
-    @NonNull final private CompositeDisposable databaseUpdateReactor;
+    @NonNull
+    final private SerialDisposable progressUpdateReactor;
+    @NonNull
+    final private CompositeDisposable databaseUpdateReactor;
     /*//////////////////////////////////////////////////////////////////////////
     // Intent
     //////////////////////////////////////////////////////////////////////////*/
 
-    @NonNull public static final String REPEAT_MODE = "repeat_mode";
-    @NonNull public static final String PLAYBACK_PITCH = "playback_pitch";
-    @NonNull public static final String PLAYBACK_SPEED = "playback_speed";
-    @NonNull public static final String PLAYBACK_SKIP_SILENCE = "playback_skip_silence";
-    @NonNull public static final String PLAYBACK_QUALITY = "playback_quality";
-    @NonNull public static final String PLAY_QUEUE_KEY = "play_queue_key";
-    @NonNull public static final String APPEND_ONLY = "append_only";
-    @NonNull public static final String SELECT_ON_APPEND = "select_on_append";
+    @NonNull
+    public static final String REPEAT_MODE = "repeat_mode";
+    @NonNull
+    public static final String PLAYBACK_PITCH = "playback_pitch";
+    @NonNull
+    public static final String PLAYBACK_SPEED = "playback_speed";
+    @NonNull
+    public static final String PLAYBACK_SKIP_SILENCE = "playback_skip_silence";
+    @NonNull
+    public static final String PLAYBACK_QUALITY = "playback_quality";
+    @NonNull
+    public static final String PLAY_QUEUE_KEY = "play_queue_key";
+    @NonNull
+    public static final String APPEND_ONLY = "append_only";
+    @NonNull
+    public static final String SELECT_ON_APPEND = "select_on_append";
 
     /*//////////////////////////////////////////////////////////////////////////
     // Playback
@@ -137,13 +156,18 @@ public abstract class BasePlayer implements
     protected PlayQueue playQueue;
     protected PlayQueueAdapter playQueueAdapter;
 
-    @Nullable protected MediaSourceManager playbackManager;
+    @Nullable
+    protected MediaSourceManager playbackManager;
 
-    @Nullable private PlayQueueItem currentItem;
-    @Nullable private MediaSourceTag currentMetadata;
-    @Nullable private Bitmap currentThumbnail;
+    @Nullable
+    private PlayQueueItem currentItem;
+    @Nullable
+    private MediaSourceTag currentMetadata;
+    @Nullable
+    private Bitmap currentThumbnail;
 
-    @Nullable protected Toast errorToast;
+    @Nullable
+    protected Toast errorToast;
 
     /*//////////////////////////////////////////////////////////////////////////
     // Player
@@ -213,7 +237,8 @@ public abstract class BasePlayer implements
         registerBroadcastReceiver();
     }
 
-    public void initListeners() {}
+    public void initListeners() {
+    }
 
     public void handleIntent(Intent intent) {
         if (DEBUG) Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
@@ -297,7 +322,6 @@ public abstract class BasePlayer implements
         databaseUpdateReactor.clear();
         progressUpdateReactor.set(null);
 
-        simpleExoPlayer = null;
     }
 
     /*//////////////////////////////////////////////////////////////////////////
@@ -425,13 +449,15 @@ public abstract class BasePlayer implements
         if (!isProgressLoopRunning()) startProgressLoop();
     }
 
-    public void onBuffering() {}
+    public void onBuffering() {
+    }
 
     public void onPaused() {
         if (isProgressLoopRunning()) stopProgressLoop();
     }
 
-    public void onPausedSeek() {}
+    public void onPausedSeek() {
+    }
 
     public void onCompleted() {
         if (DEBUG) Log.d(TAG, "onCompleted() called");
@@ -602,19 +628,19 @@ public abstract class BasePlayer implements
     /**
      * Processes the exceptions produced by {@link com.google.android.exoplayer2.ExoPlayer ExoPlayer}.
      * There are multiple types of errors: <br><br>
-     *
+     * <p>
      * {@link ExoPlaybackException#TYPE_SOURCE TYPE_SOURCE}: <br><br>
-     *
+     * <p>
      * {@link ExoPlaybackException#TYPE_UNEXPECTED TYPE_UNEXPECTED}: <br><br>
      * If a runtime error occurred, then we can try to recover it by restarting the playback
      * after setting the timestamp recovery. <br><br>
-     *
+     * <p>
      * {@link ExoPlaybackException#TYPE_RENDERER TYPE_RENDERER}: <br><br>
      * If the renderer failed, treat the error as unrecoverable.
      *
      * @see #processSourceError(IOException)
      * @see Player.EventListener#onPlayerError(ExoPlaybackException)
-     *  */
+     */
     @Override
     public void onPlayerError(ExoPlaybackException error) {
         if (DEBUG) Log.d(TAG, "ExoPlayer - onPlayerError() called with: " +
@@ -900,8 +926,8 @@ public abstract class BasePlayer implements
         if (DEBUG) Log.d(TAG, "onPlayPrevious() called");
 
         /* If current playback has run for PLAY_PREV_ACTIVATION_LIMIT_MILLIS milliseconds,
-        * restart current track. Also restart the track if the current track
-        * is the first in a queue.*/
+         * restart current track. Also restart the track if the current track
+         * is the first in a queue.*/
         if (simpleExoPlayer.getCurrentPosition() > PLAY_PREV_ACTIVATION_LIMIT_MILLIS ||
                 playQueue.getIndex() == 0) {
             seekToDefault();
@@ -1010,8 +1036,8 @@ public abstract class BasePlayer implements
         try {
             metadata = (MediaSourceTag) simpleExoPlayer.getCurrentTag();
         } catch (IndexOutOfBoundsException | ClassCastException error) {
-            if(DEBUG) Log.d(TAG, "Could not update metadata: " + error.getMessage());
-            if(DEBUG) error.printStackTrace();
+            if (DEBUG) Log.d(TAG, "Could not update metadata: " + error.getMessage());
+            if (DEBUG) error.printStackTrace();
             return;
         }
 
@@ -1075,7 +1101,9 @@ public abstract class BasePlayer implements
                 currentThumbnail;
     }
 
-    /** Checks if the current playback is a livestream AND is playing at or beyond the live edge */
+    /**
+     * Checks if the current playback is a livestream AND is playing at or beyond the live edge
+     */
     @SuppressWarnings("BooleanMethodIsAlwaysInverted")
     public boolean isLiveEdge() {
         if (simpleExoPlayer == null || !isLive()) return false;
@@ -1099,8 +1127,8 @@ public abstract class BasePlayer implements
         } catch (@NonNull IndexOutOfBoundsException ignored) {
             // Why would this even happen =(
             // But lets log it anyway. Save is save
-            if(DEBUG) Log.d(TAG, "Could not update metadata: " + ignored.getMessage());
-            if(DEBUG) ignored.printStackTrace();
+            if (DEBUG) Log.d(TAG, "Could not update metadata: " + ignored.getMessage());
+            if (DEBUG) ignored.printStackTrace();
             return false;
         }
     }
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 3e6a58415..7827c822e 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -274,6 +274,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
             return;
         }
 
+      
         if (deltaTime > 1000 && deltaDone > 0) {
             float speed = (float) deltaDone / deltaTime;
             String speedStr = Utility.formatSpeed(speed * 1000);
@@ -296,6 +297,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
         Log.v(TAG, "Mime: " + mimeType + " package: " + BuildConfig.APPLICATION_ID + ".provider");
 
         Uri uri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".provider", file);
+  
         Intent intent = new Intent();
         intent.setAction(Intent.ACTION_VIEW);
         intent.setDataAndType(uri, mimeType);
@@ -574,6 +576,10 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
             source = menu.findItem(R.id.source);
             checksum = menu.findItem(R.id.checksum);
 
+            itemView.setOnClickListener((v) -> {
+                  if(h.mission.finished) viewWithFileProvider(h);
+            });
+
             //h.itemView.setOnClickListener(v -> showDetail(h));
         }
 
diff --git a/app/src/main/res/menu/mission.xml b/app/src/main/res/menu/mission.xml
index 4f7eba626..961e12fd0 100644
--- a/app/src/main/res/menu/mission.xml
+++ b/app/src/main/res/menu/mission.xml
@@ -1,5 +1,4 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-
     <item
         android:id="@+id/start"
         android:title="@string/start" />
@@ -46,5 +45,4 @@
         </menu>
 
     </item>
-
 </menu>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 842042e16..3fad6b288 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -508,4 +508,21 @@
     <string name="grid">Сетка</string>
 	<string name="auto">Автоматически</string>
 
+    <string name="brightness_gesture_control_summary">Менять яркость плеера жестом</string>
+    <string name="brightness_gesture_control_title">Жест яркости</string>
+    <string name="download_to_sdcard_error_message">Загрузка на внешний накопитель невозможна. Сбросить расположение папки загрузки?</string>
+    <string name="download_to_sdcard_error_title">Внешний накопитель недоступен</string>
+    <string name="main_page_content_summary">Вкладки, видимые на главной странице</string>
+    <string name="restore_defaults">По умолчанию</string>
+    <string name="restore_defaults_confirmation">Хотите восстановить умолчания?</string>
+    <string name="saved_tabs_invalid_json">Ошибка чтения сохранённых вкладок. Используются вкладки по умолчанию</string>
+    <string name="selection">Выбор</string>
+    <string name="subscribers_count_not_available">Количество подписчиков недоступно</string>
+    <string name="switch_view">Переключить вид</string>
+    <string name="tab_choose">Выберите вкладку</string>
+    <string name="tab_new">Новая вкладка</string>
+    <string name="unsubscribe">Отписаться</string>
+    <string name="volume_gesture_control_summary">Менять громкость плеера жестом</string>
+    <string name="volume_gesture_control_title">Жест громкости</string>
+
 </resources>
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_1.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_2.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_3.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_4.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_5.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_6.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_7.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_8.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png
similarity index 100%
rename from fastlane/metadata/android/en-US/images/phoneScreenshots/shot_9.png
rename to fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png