Migrate SettingsActivity and Fragment to Kotlin

This commit is contained in:
Torsten Grote 2019-07-04 08:38:29 +02:00
parent c801502e81
commit ee6cf38312
No known key found for this signature in database
GPG key ID: 3E5F77D92CF891FF
4 changed files with 168 additions and 180 deletions

View file

@ -1,103 +0,0 @@
package com.stevesoltys.backup.settings;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProviders;
import com.stevesoltys.backup.R;
import static android.content.Intent.ACTION_OPEN_DOCUMENT_TREE;
import static android.content.Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION;
import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION;
import static android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
import static android.widget.Toast.LENGTH_LONG;
import static android.widget.Toast.LENGTH_SHORT;
import static com.stevesoltys.backup.activity.MainActivity.OPEN_DOCUMENT_TREE_REQUEST_CODE;
import static java.util.Objects.requireNonNull;
public class SettingsActivity extends AppCompatActivity {
private final static String TAG = SettingsActivity.class.getName();
private SettingsViewModel viewModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
viewModel = ViewModelProviders.of(this).get(SettingsViewModel.class);
requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onStart() {
super.onStart();
if (!viewModel.locationIsSet()) {
showChooseFolderActivity();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.settings_menu, menu);
if (getResources().getBoolean(R.bool.show_restore_in_settings)) {
menu.findItem(R.id.action_restore).setVisible(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
} else if (item.getItemId() == R.id.action_backup) {
Toast.makeText(this, "Not yet implemented", LENGTH_SHORT).show();
return true;
} else if (item.getItemId() == R.id.action_restore) {
Toast.makeText(this, "Not yet implemented", LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent result) {
if (resultCode != Activity.RESULT_OK) {
Log.w(TAG, "Error in activity result: " + requestCode);
return;
}
if (requestCode == OPEN_DOCUMENT_TREE_REQUEST_CODE) {
viewModel.handleChooseFolderResult(result);
}
}
private void showChooseFolderActivity() {
Intent openTreeIntent = new Intent(ACTION_OPEN_DOCUMENT_TREE);
openTreeIntent.addFlags(FLAG_GRANT_PERSISTABLE_URI_PERMISSION |
FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
try {
Intent documentChooser = Intent.createChooser(openTreeIntent, "Select the backup location");
startActivityForResult(documentChooser, OPEN_DOCUMENT_TREE_REQUEST_CODE);
} catch (ActivityNotFoundException ex) {
Toast.makeText(this, "Please install a file manager.", LENGTH_LONG).show();
}
}
}

View file

@ -0,0 +1,91 @@
package com.stevesoltys.backup.settings
import android.content.ActivityNotFoundException
import android.content.Intent
import android.content.Intent.*
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import android.widget.Toast.LENGTH_LONG
import android.widget.Toast.LENGTH_SHORT
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProviders
import com.stevesoltys.backup.R
import com.stevesoltys.backup.activity.MainActivity.OPEN_DOCUMENT_TREE_REQUEST_CODE
private val TAG = SettingsActivity::class.java.name
class SettingsActivity : AppCompatActivity() {
private lateinit var viewModel: SettingsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
viewModel = ViewModelProviders.of(this).get(SettingsViewModel::class.java)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
}
override fun onStart() {
super.onStart()
if (!viewModel.locationIsSet()) {
showChooseFolderActivity()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.settings_menu, menu)
if (resources.getBoolean(R.bool.show_restore_in_settings)) {
menu.findItem(R.id.action_restore).isVisible = true
}
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when {
item.itemId == android.R.id.home -> {
onBackPressed()
true
}
item.itemId == R.id.action_backup -> {
Toast.makeText(this, "Not yet implemented", LENGTH_SHORT).show()
true
}
item.itemId == R.id.action_restore -> {
Toast.makeText(this, "Not yet implemented", LENGTH_SHORT).show()
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, result: Intent?) {
if (resultCode != RESULT_OK) {
Log.w(TAG, "Error in activity result: $requestCode")
return
}
if (requestCode == OPEN_DOCUMENT_TREE_REQUEST_CODE) {
viewModel.handleChooseFolderResult(result)
}
}
private fun showChooseFolderActivity() {
val openTreeIntent = Intent(ACTION_OPEN_DOCUMENT_TREE)
openTreeIntent.addFlags(FLAG_GRANT_PERSISTABLE_URI_PERMISSION or
FLAG_GRANT_READ_URI_PERMISSION or FLAG_GRANT_WRITE_URI_PERMISSION)
// TODO StringRes
try {
val documentChooser = createChooser(openTreeIntent, "Select the backup location")
startActivityForResult(documentChooser, OPEN_DOCUMENT_TREE_REQUEST_CODE)
} catch (ex: ActivityNotFoundException) {
Toast.makeText(this, "Please install a file manager.", LENGTH_LONG).show()
}
}
}

View file

@ -1,77 +0,0 @@
package com.stevesoltys.backup.settings;
import android.app.backup.IBackupManager;
import android.content.ContentResolver;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.Settings;
import android.util.Log;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.TwoStatePreference;
import com.stevesoltys.backup.R;
import static android.content.Context.BACKUP_SERVICE;
import static android.os.ServiceManager.getService;
import static android.provider.Settings.Secure.BACKUP_AUTO_RESTORE;
public class SettingsFragment extends PreferenceFragmentCompat {
private final static String TAG = SettingsFragment.class.getSimpleName();
private IBackupManager backupManager;
private TwoStatePreference backup;
private TwoStatePreference autoRestore;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.settings, rootKey);
backupManager = IBackupManager.Stub.asInterface(getService(BACKUP_SERVICE));
backup = (TwoStatePreference) findPreference("backup");
backup.setOnPreferenceChangeListener((preference, newValue) -> {
boolean enabled = (boolean) newValue;
try {
backupManager.setBackupEnabled(enabled);
return true;
} catch (RemoteException e) {
e.printStackTrace();
backup.setChecked(!enabled);
return false;
}
});
autoRestore = (TwoStatePreference) findPreference("auto_restore");
autoRestore.setOnPreferenceChangeListener((preference, newValue) -> {
boolean enabled = (boolean) newValue;
try {
backupManager.setAutoRestore(enabled);
return true;
} catch (RemoteException e) {
Log.e(TAG, "Error communicating with BackupManager", e);
autoRestore.setChecked(!enabled);
return false;
}
});
}
@Override
public void onStart() {
super.onStart();
try {
backup.setChecked(backupManager.isBackupEnabled());
backup.setEnabled(true);
} catch (RemoteException e) {
Log.e(TAG, "Error communicating with BackupManager", e);
backup.setEnabled(false);
}
ContentResolver resolver = requireContext().getContentResolver();
autoRestore.setChecked(Settings.Secure.getInt(resolver, BACKUP_AUTO_RESTORE, 1) == 1);
}
}

View file

@ -0,0 +1,77 @@
package com.stevesoltys.backup.settings
import android.app.backup.IBackupManager
import android.content.ContentResolver
import android.os.Bundle
import android.os.RemoteException
import android.provider.Settings
import android.util.Log
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.TwoStatePreference
import com.stevesoltys.backup.R
import android.content.Context.BACKUP_SERVICE
import android.os.ServiceManager.getService
import android.provider.Settings.Secure.BACKUP_AUTO_RESTORE
import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceChangeListener
private val TAG = SettingsFragment::class.java.name
class SettingsFragment : PreferenceFragmentCompat() {
private lateinit var backupManager: IBackupManager
private lateinit var backup: TwoStatePreference
private lateinit var autoRestore: TwoStatePreference
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.settings, rootKey)
backupManager = IBackupManager.Stub.asInterface(getService(BACKUP_SERVICE))
backup = findPreference("backup") as TwoStatePreference
backup.onPreferenceChangeListener = OnPreferenceChangeListener { _, newValue ->
val enabled = newValue as Boolean
try {
backupManager.isBackupEnabled = enabled
return@OnPreferenceChangeListener true
} catch (e: RemoteException) {
e.printStackTrace()
backup.isChecked = !enabled
return@OnPreferenceChangeListener false
}
}
autoRestore = findPreference("auto_restore") as TwoStatePreference
autoRestore.onPreferenceChangeListener = OnPreferenceChangeListener { _, newValue ->
val enabled = newValue as Boolean
try {
backupManager.setAutoRestore(enabled)
return@OnPreferenceChangeListener true
} catch (e: RemoteException) {
Log.e(TAG, "Error communicating with BackupManager", e)
autoRestore.isChecked = !enabled
return@OnPreferenceChangeListener false
}
}
}
override fun onStart() {
super.onStart()
try {
backup.isChecked = backupManager.isBackupEnabled
backup.isEnabled = true
} catch (e: RemoteException) {
Log.e(TAG, "Error communicating with BackupManager", e)
backup.isEnabled = false
}
val resolver = requireContext().contentResolver
autoRestore.isChecked = Settings.Secure.getInt(resolver, BACKUP_AUTO_RESTORE, 1) == 1
}
}