Skip to content

Commit 854b584

Browse files
committed
Convert DirectorySelectActivity to kotlin
1 parent 02426a4 commit 854b584

File tree

1 file changed

+103
-100
lines changed

1 file changed

+103
-100
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,132 @@
1-
package awais.instagrabber.activities;
1+
package awais.instagrabber.activities
22

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
1223

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
1626

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
2029

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)
4540
}
4641

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? ->
5045
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
5449
}
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+
})
6459
}
6560

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)
6863
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)
7065
}
7166
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)
7873
}
7974
}
8075

8176
@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
8680
if (resultCode != RESULT_OK) {
87-
showErrorDialog(getString(R.string.select_a_folder));
88-
return;
81+
showErrorDialog(getString(R.string.select_a_folder))
82+
return
8983
}
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
9387
}
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
9792
}
98-
AppExecutors.INSTANCE.getMainThread().execute(() -> {
93+
mainThread.execute({
9994
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) {
105100
// Should not come to this point.
106101
// 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)
113111
}
114112
}
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)
116126
}
117127

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
128131
}
129-
}
132+
}

0 commit comments

Comments
 (0)