From ee6cf383125f0c113c15bc08f172c9000e4e1df5 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 4 Jul 2019 08:38:29 +0200 Subject: [PATCH] Migrate SettingsActivity and Fragment to Kotlin --- .../backup/settings/SettingsActivity.java | 103 ------------------ .../backup/settings/SettingsActivity.kt | 91 ++++++++++++++++ .../backup/settings/SettingsFragment.java | 77 ------------- .../backup/settings/SettingsFragment.kt | 77 +++++++++++++ 4 files changed, 168 insertions(+), 180 deletions(-) delete mode 100644 app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.java create mode 100644 app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.kt delete mode 100644 app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.java create mode 100644 app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.kt diff --git a/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.java b/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.java deleted file mode 100644 index 67e27d93..00000000 --- a/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.java +++ /dev/null @@ -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(); - } - } - -} diff --git a/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.kt b/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.kt new file mode 100644 index 00000000..9cc06890 --- /dev/null +++ b/app/src/main/java/com/stevesoltys/backup/settings/SettingsActivity.kt @@ -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() + } + } + +} diff --git a/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.java b/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.java deleted file mode 100644 index aa530dc6..00000000 --- a/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.java +++ /dev/null @@ -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); - } - -} diff --git a/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.kt b/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.kt new file mode 100644 index 00000000..31e8432f --- /dev/null +++ b/app/src/main/java/com/stevesoltys/backup/settings/SettingsFragment.kt @@ -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 + } + +}