Skip to content

Commit 4aa1ce3

Browse files
committed
Add cancel button and progress bar
1 parent e9031f2 commit 4aa1ce3

File tree

4 files changed

+63
-17
lines changed

4 files changed

+63
-17
lines changed

app/src/main/java/protect/videotranscoder/FFmpegResponseHandler.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.ProgressDialog;
44
import android.content.Context;
55
import android.util.Log;
6+
import android.widget.ProgressBar;
67

78
import com.github.hiteshsondhi88.libffmpeg.ExecuteBinaryResponseHandler;
89

@@ -11,14 +12,14 @@ public class FFmpegResponseHandler extends ExecuteBinaryResponseHandler
1112
private static final String TAG = "VideoTranscoder";
1213

1314
private final long _durationMs;
14-
private final ProgressDialog _progressDialog;
15+
private final ProgressBar _progressBar;
1516
private final ResultCallbackHandler<Boolean> _resultHandler;
1617

17-
public FFmpegResponseHandler(long durationMs, ProgressDialog progressDialog,
18+
public FFmpegResponseHandler(long durationMs, ProgressBar progressBar,
1819
ResultCallbackHandler<Boolean> resultHandler)
1920
{
2021
_durationMs = durationMs;
21-
_progressDialog = progressDialog;
22+
_progressBar = progressBar;
2223
_resultHandler = resultHandler;
2324
}
2425

@@ -61,23 +62,19 @@ public void onProgress(String s)
6162
if(currentTimeMs != null)
6263
{
6364
int percentComplete = (int)Math.floor((currentTimeMs * 100) / (float)_durationMs);
64-
65-
_progressDialog.setMessage(percentComplete + "%");
65+
_progressBar.setProgress(percentComplete);
6666
}
6767
}
6868

6969
@Override
7070
public void onStart()
7171
{
7272
Log.d(TAG, "Started FFmpeg command");
73-
_progressDialog.setMessage("Processing...");
74-
_progressDialog.show();
7573
}
7674

7775
@Override
7876
public void onFinish()
7977
{
8078
Log.d(TAG, "Finished command");
81-
_progressDialog.dismiss();
8279
}
8380
}

app/src/main/java/protect/videotranscoder/activity/MainActivity.java

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package protect.videotranscoder.activity;
22

33
import android.Manifest;
4-
import android.app.ProgressDialog;
54
import android.content.ContentUris;
65
import android.content.Context;
76
import android.content.DialogInterface;
@@ -27,6 +26,7 @@
2726
import android.widget.AdapterView;
2827
import android.widget.ArrayAdapter;
2928
import android.widget.Button;
29+
import android.widget.ProgressBar;
3030
import android.widget.Spinner;
3131
import android.widget.TextView;
3232
import android.widget.Toast;
@@ -96,7 +96,7 @@ public class MainActivity extends AppCompatActivity
9696
private VideoView videoView;
9797
private CrystalRangeSeekbar rangeSeekBar;
9898
private Timer videoTimer = null;
99-
private ProgressDialog progressDialog;
99+
private ProgressBar progressBar;
100100

101101
private Spinner containerSpinner;
102102
private Spinner videoCodecSpinner;
@@ -109,7 +109,9 @@ public class MainActivity extends AppCompatActivity
109109
private Spinner audioChannelSpinner;
110110

111111
private TextView tvLeft, tvRight;
112+
private Button selectVideoButton;
112113
private Button encodeButton;
114+
private Button cancelButton;
113115
private MediaInfo videoInfo;
114116
private File outputDestination;
115117

@@ -118,17 +120,16 @@ protected void onCreate(Bundle savedInstanceState)
118120
{
119121
super.onCreate(savedInstanceState);
120122
setContentView(R.layout.activity_main);
121-
final Button selectVideo = findViewById(R.id.selectVideo);
123+
selectVideoButton = findViewById(R.id.selectVideo);
122124
encodeButton = findViewById(R.id.encode);
125+
cancelButton = findViewById(R.id.cancel);
123126

124127
tvLeft = findViewById(R.id.tvLeft);
125128
tvRight = findViewById(R.id.tvRight);
126129

127130
videoView = findViewById(R.id.videoView);
128131
rangeSeekBar = findViewById(R.id.rangeSeekBar);
129-
progressDialog = new ProgressDialog(this);
130-
progressDialog.setTitle(null);
131-
progressDialog.setCancelable(false);
132+
progressBar = findViewById(R.id.encodeProgress);
132133
rangeSeekBar.setEnabled(false);
133134

134135
containerSpinner = findViewById(R.id.containerSpinner);
@@ -153,7 +154,7 @@ public void onResult(Boolean result)
153154
}
154155
});
155156

156-
selectVideo.setOnClickListener(new View.OnClickListener()
157+
selectVideoButton.setOnClickListener(new View.OnClickListener()
157158
{
158159
@Override
159160
public void onClick(View v)
@@ -177,6 +178,15 @@ public void onClick(View v)
177178
startEncode();
178179
}
179180
});
181+
182+
cancelButton.setOnClickListener(new View.OnClickListener()
183+
{
184+
@Override
185+
public void onClick(View v)
186+
{
187+
cancelEncode();
188+
}
189+
});
180190
}
181191

182192
private void getPermission()
@@ -379,10 +389,28 @@ private void startEncode()
379389
// Output file
380390
command.add(destination.getAbsolutePath());
381391

382-
FFmpegResponseHandler handler = new FFmpegResponseHandler(videoInfo.durationMs, progressDialog, _transcodeResultHandler);
392+
FFmpegResponseHandler handler = new FFmpegResponseHandler(videoInfo.durationMs, progressBar, _transcodeResultHandler);
383393
FFmpegUtil.call(command.toArray(new String[command.size()]), handler);
384394

385395
stopVideoPlayback();
396+
397+
selectVideoButton.setVisibility(View.GONE);
398+
encodeButton.setVisibility(View.GONE);
399+
cancelButton.setVisibility(View.VISIBLE);
400+
progressBar.setVisibility(View.VISIBLE);
401+
}
402+
403+
private void cancelEncode()
404+
{
405+
FFmpegUtil.cancelCall();
406+
407+
_transcodeResultHandler.onResult(false);
408+
409+
boolean result = outputDestination.delete();
410+
if(result == false)
411+
{
412+
Log.d(TAG, "Failed to remove after encode cancel: " + outputDestination.getAbsolutePath());
413+
}
386414
}
387415

388416
private void stopVideoPlayback()
@@ -715,6 +743,11 @@ public void onClick(DialogInterface dialog, int which)
715743
.show();
716744

717745
startVideoPlayback();
746+
747+
selectVideoButton.setVisibility(View.VISIBLE);
748+
encodeButton.setVisibility(View.VISIBLE);
749+
cancelButton.setVisibility(View.GONE);
750+
progressBar.setVisibility(View.GONE);
718751
}
719752
};
720753

app/src/main/res/layout/activity_main.xml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,23 @@
7070
android:visibility="gone"
7171
android:text="@string/encode"
7272
/>
73+
<Button
74+
android:id="@+id/cancel"
75+
android:layout_width="wrap_content"
76+
android:layout_height="match_parent"
77+
android:visibility="gone"
78+
android:text="@string/cancel"
79+
/>
7380
</LinearLayout>
7481

82+
<ProgressBar
83+
android:id="@+id/encodeProgress"
84+
style="@android:style/Widget.ProgressBar.Horizontal"
85+
android:layout_width="match_parent"
86+
android:layout_height="wrap_content"
87+
android:visibility="gone"
88+
android:layout_below="@id/buttonContainer"/>
89+
7590
<!-- Basic Settings Title -->
7691
<TextView
7792
android:id="@+id/basicSettingsText"
@@ -81,7 +96,7 @@
8196
android:paddingRight="@dimen/titlePaddingHorizontal"
8297
android:paddingStart="@dimen/titlePaddingHorizontal"
8398
android:paddingTop="@dimen/titlePaddingTop"
84-
android:layout_below="@id/buttonContainer"
99+
android:layout_below="@id/encodeProgress"
85100
android:text="Basic Settings"
86101
android:textSize="@dimen/inputTitleSize"
87102
android:visibility="gone"

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
<string name="selectVideo">Select\nVideo</string>
77
<string name="encode">Encode</string>
8+
<string name="cancel">Cancel</string>
89

910
<string name="ok">OK</string>
1011

0 commit comments

Comments
 (0)