1
- package awais.instagrabber.activities ;
1
+ package awais.instagrabber.activities
2
2
3
- import android.annotation.SuppressLint;
4
- import android.content.ActivityNotFoundException;
5
- import android.content.Intent;
6
- import android.net.Uri;
7
- import android.os.Build;
8
- import android.os.Bundle;
9
- import android.provider.DocumentsContract;
10
- import android.util.Log;
11
- import android.view.View;
3
+ import android.annotation.SuppressLint
4
+ import android.content.ActivityNotFoundException
5
+ import android.content.Intent
6
+ import android.net.Uri
7
+ import android.os.Build
8
+ import android.os.Bundle
9
+ import android.provider.DocumentsContract
10
+ import android.util.Log
11
+ import android.view.View
12
+ import androidx.lifecycle.ViewModelProvider
13
+ import awais.instagrabber.R
14
+ import awais.instagrabber.databinding.ActivityDirectorySelectBinding
15
+ import awais.instagrabber.dialogs.ConfirmDialogFragment
16
+ import awais.instagrabber.utils.AppExecutors.mainThread
17
+ import awais.instagrabber.utils.Constants
18
+ import awais.instagrabber.utils.extensions.TAG
19
+ import awais.instagrabber.viewmodels.DirectorySelectActivityViewModel
20
+ import java.io.IOException
21
+ import java.io.PrintWriter
22
+ import java.io.StringWriter
12
23
13
- import androidx.annotation.NonNull;
14
- import androidx.annotation.Nullable;
15
- import androidx.lifecycle.ViewModelProvider;
24
+ class DirectorySelectActivity : BaseLanguageActivity () {
25
+ private var initialUri: Uri ? = null
16
26
17
- import java.io.IOException;
18
- import java.io.PrintWriter;
19
- import java.io.StringWriter;
27
+ private lateinit var binding: ActivityDirectorySelectBinding
28
+ private lateinit var viewModel: DirectorySelectActivityViewModel
20
29
21
- import awais.instagrabber.R;
22
- import awais.instagrabber.databinding.ActivityDirectorySelectBinding;
23
- import awais.instagrabber.dialogs.ConfirmDialogFragment;
24
- import awais.instagrabber.utils.AppExecutors;
25
- import awais.instagrabber.viewmodels.DirectorySelectActivityViewModel;
26
-
27
- public class DirectorySelectActivity extends BaseLanguageActivity {
28
- private static final String TAG = DirectorySelectActivity .class .getSimpleName();
29
- public static final int SELECT_DIR_REQUEST_CODE = 0x01 ;
30
- private static final int ERROR_REQUEST_CODE = 0x02 ;
31
-
32
- private Uri initialUri;
33
- private ActivityDirectorySelectBinding binding;
34
- private DirectorySelectActivityViewModel viewModel;
35
-
36
- @Override
37
- protected void onCreate(@Nullable final Bundle savedInstanceState) {
38
- super .onCreate(savedInstanceState);
39
- binding = ActivityDirectorySelectBinding .inflate(getLayoutInflater());
40
- setContentView(binding.getRoot());
41
- viewModel = new ViewModelProvider (this ).get(DirectorySelectActivityViewModel .class );
42
- setupObservers();
43
- binding.selectDir.setOnClickListener(v -> openDirectoryChooser());
44
- AppExecutors .INSTANCE .getMainThread().execute(() -> viewModel.setInitialUri(getIntent()));
30
+ override fun onCreate (savedInstanceState : Bundle ? ) {
31
+ super .onCreate(savedInstanceState)
32
+ binding = ActivityDirectorySelectBinding .inflate(layoutInflater)
33
+ setContentView(binding.root)
34
+ viewModel = ViewModelProvider (this ).get(DirectorySelectActivityViewModel ::class .java)
35
+ val intent = intent
36
+ viewModel.setInitialUri(intent)
37
+ setupObservers()
38
+ binding.selectDir.setOnClickListener { openDirectoryChooser() }
39
+ initialUri = intent.getParcelableExtra(Constants .EXTRA_INITIAL_URI )
45
40
}
46
41
47
- private void setupObservers() {
48
- viewModel.getMessage() .observe(this , message -> binding.message.setText( message));
49
- viewModel.getPrevUri() .observe(this , prevUri -> {
42
+ private fun setupObservers () {
43
+ viewModel.message .observe(this , { message: String? -> binding.message.text = message })
44
+ viewModel.prevUri .observe(this , { prevUri: String? ->
50
45
if (prevUri == null ) {
51
- binding.prevUri.setVisibility( View .GONE );
52
- binding.message2.setVisibility( View .GONE );
53
- return ;
46
+ binding.prevUri.visibility = View .GONE
47
+ binding.message2.visibility = View .GONE
48
+ return @observe
54
49
}
55
- binding.prevUri.setText( prevUri);
56
- binding.prevUri.setVisibility( View .VISIBLE );
57
- binding.message2.setVisibility( View .VISIBLE );
58
- });
59
- viewModel.getDirSuccess() .observe(this , success -> binding.selectDir.setVisibility (success ? View .GONE : View .VISIBLE ));
60
- viewModel.isLoading() .observe(this , loading -> {
61
- binding.message.setVisibility (loading ? View .GONE : View .VISIBLE );
62
- binding.loadingIndicator.setVisibility (loading ? View .VISIBLE : View .GONE );
63
- });
50
+ binding.prevUri.text = prevUri
51
+ binding.prevUri.visibility = View .VISIBLE
52
+ binding.message2.visibility = View .VISIBLE
53
+ })
54
+ viewModel.dirSuccess .observe(this , { success: Boolean -> binding.selectDir.visibility = if (success) View .GONE else View .VISIBLE })
55
+ viewModel.isLoading.observe(this , { loading: Boolean ->
56
+ binding.message.visibility = if (loading) View .GONE else View .VISIBLE
57
+ binding.loadingIndicator.visibility = if (loading) View .VISIBLE else View .GONE
58
+ })
64
59
}
65
60
66
- private void openDirectoryChooser() {
67
- final Intent intent = new Intent (Intent .ACTION_OPEN_DOCUMENT_TREE );
61
+ private fun openDirectoryChooser () {
62
+ val intent = Intent (Intent .ACTION_OPEN_DOCUMENT_TREE )
68
63
if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O && initialUri != null ) {
69
- intent.putExtra(DocumentsContract .EXTRA_INITIAL_URI , initialUri);
64
+ intent.putExtra(DocumentsContract .EXTRA_INITIAL_URI , initialUri)
70
65
}
71
66
try {
72
- startActivityForResult(intent, SELECT_DIR_REQUEST_CODE );
73
- } catch (ActivityNotFoundException e ) {
74
- Log .e(TAG , " openDirectoryChooser: " , e);
75
- showErrorDialog(getString(R .string.no_directory_picker_activity));
76
- } catch (Exception e ) {
77
- Log .e(TAG , " openDirectoryChooser: " , e);
67
+ startActivityForResult(intent, SELECT_DIR_REQUEST_CODE )
68
+ } catch (e : ActivityNotFoundException ) {
69
+ Log .e(TAG , " openDirectoryChooser: " , e)
70
+ showErrorDialog(getString(R .string.no_directory_picker_activity))
71
+ } catch (e : Exception ) {
72
+ Log .e(TAG , " openDirectoryChooser: " , e)
78
73
}
79
74
}
80
75
81
76
@SuppressLint(" StringFormatInvalid" )
82
- @Override
83
- protected void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) {
84
- super .onActivityResult(requestCode, resultCode, data);
85
- if (requestCode != SELECT_DIR_REQUEST_CODE ) return ;
77
+ override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
78
+ super .onActivityResult(requestCode, resultCode, data)
79
+ if (requestCode != SELECT_DIR_REQUEST_CODE ) return
86
80
if (resultCode != RESULT_OK ) {
87
- showErrorDialog(getString(R .string.select_a_folder));
88
- return ;
81
+ showErrorDialog(getString(R .string.select_a_folder))
82
+ return
89
83
}
90
- if (data == null || data.getData() == null ) {
91
- showErrorDialog(getString(R .string.select_a_folder));
92
- return ;
84
+ if (data == null || data.data == null ) {
85
+ showErrorDialog(getString(R .string.select_a_folder))
86
+ return
93
87
}
94
- if (! " com.android.externalstorage.documents" .equals(data.getData().getAuthority())) {
95
- showErrorDialog(getString(R .string.dir_select_no_download_folder, data.getData().getAuthority()));
96
- return ;
88
+ val authority = data.data?.authority
89
+ if (" com.android.externalstorage.documents" != authority) {
90
+ showErrorDialog(getString(R .string.dir_select_no_download_folder, authority))
91
+ return
97
92
}
98
- AppExecutors . INSTANCE .getMainThread(). execute(() -> {
93
+ mainThread. execute({
99
94
try {
100
- viewModel.setupSelectedDir(data);
101
- final Intent intent = new Intent (this , MainActivity . class );
102
- startActivity(intent);
103
- finish();
104
- } catch (Exception e ) {
95
+ viewModel.setupSelectedDir(data)
96
+ val intent = Intent (this , MainActivity :: class .java)
97
+ startActivity(intent)
98
+ finish()
99
+ } catch (e : Exception ) {
105
100
// Should not come to this point.
106
101
// If it does, we have to show this error to the user so that they can report it.
107
- try (final StringWriter sw = new StringWriter ();
108
- final PrintWriter pw = new PrintWriter (sw)) {
109
- e.printStackTrace(pw);
110
- showErrorDialog(" Please report this error to the developers:\n\n " + sw.toString());
111
- } catch (IOException ioException) {
112
- Log .e(TAG , " onActivityResult: " , ioException);
102
+ try {
103
+ StringWriter ().use { sw ->
104
+ PrintWriter (sw).use { pw ->
105
+ e.printStackTrace(pw)
106
+ showErrorDialog(" Please report this error to the developers:\n\n $sw " )
107
+ }
108
+ }
109
+ } catch (ioException: IOException ) {
110
+ Log .e(TAG , " onActivityResult: " , ioException)
113
111
}
114
112
}
115
- }, 500 );
113
+ }, 500 )
114
+ }
115
+
116
+ private fun showErrorDialog (message : String ) {
117
+ val dialogFragment = ConfirmDialogFragment .newInstance(
118
+ ERROR_REQUEST_CODE ,
119
+ R .string.error,
120
+ message,
121
+ R .string.ok,
122
+ 0 ,
123
+ 0
124
+ )
125
+ dialogFragment.show(supportFragmentManager, ConfirmDialogFragment ::class .java.simpleName)
116
126
}
117
127
118
- private void showErrorDialog(@NonNull final String message) {
119
- final ConfirmDialogFragment dialogFragment = ConfirmDialogFragment .newInstance(
120
- ERROR_REQUEST_CODE ,
121
- R .string.error,
122
- message,
123
- R .string.ok,
124
- 0 ,
125
- 0
126
- );
127
- dialogFragment.show(getSupportFragmentManager(), ConfirmDialogFragment .class .getSimpleName());
128
+ companion object {
129
+ const val SELECT_DIR_REQUEST_CODE = 0x01
130
+ private const val ERROR_REQUEST_CODE = 0x02
128
131
}
129
- }
132
+ }
0 commit comments