mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-17 07:22:45 +00:00
switch from deprecated startActivityForResult to registerForActivityResult
This commit is contained in:
parent
a69656a446
commit
230d5fcb03
3 changed files with 43 additions and 36 deletions
|
@ -11,7 +11,7 @@ import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import org.dslul.openboard.inputmethod.dictionarypack.DictionaryPackConstants
|
import org.dslul.openboard.inputmethod.dictionarypack.DictionaryPackConstants
|
||||||
|
@ -19,7 +19,6 @@ import org.dslul.openboard.inputmethod.keyboard.KeyboardLayoutSet
|
||||||
import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager
|
import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager
|
||||||
import org.dslul.openboard.inputmethod.latin.BuildConfig
|
import org.dslul.openboard.inputmethod.latin.BuildConfig
|
||||||
import org.dslul.openboard.inputmethod.latin.R
|
import org.dslul.openboard.inputmethod.latin.R
|
||||||
import org.dslul.openboard.inputmethod.latin.RichInputMethodManager
|
|
||||||
import org.dslul.openboard.inputmethod.latin.SystemBroadcastReceiver
|
import org.dslul.openboard.inputmethod.latin.SystemBroadcastReceiver
|
||||||
import org.dslul.openboard.inputmethod.latin.common.FileUtils
|
import org.dslul.openboard.inputmethod.latin.common.FileUtils
|
||||||
import org.dslul.openboard.inputmethod.latin.define.JniLibName
|
import org.dslul.openboard.inputmethod.latin.define.JniLibName
|
||||||
|
@ -55,6 +54,24 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
||||||
// possibly some obfuscation thing that occurred after upgrading to gradle 8?
|
// possibly some obfuscation thing that occurred after upgrading to gradle 8?
|
||||||
) }
|
) }
|
||||||
|
|
||||||
|
private val libraryFilePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (it.resultCode != Activity.RESULT_OK) return@registerForActivityResult
|
||||||
|
val uri = it.data?.data ?: return@registerForActivityResult
|
||||||
|
copyLibrary(uri)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val backupFilePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (it.resultCode != Activity.RESULT_OK) return@registerForActivityResult
|
||||||
|
val uri = it.data?.data ?: return@registerForActivityResult
|
||||||
|
backup(uri)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val restoreFilePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (it.resultCode != Activity.RESULT_OK) return@registerForActivityResult
|
||||||
|
val uri = it.data?.data ?: return@registerForActivityResult
|
||||||
|
restore(uri)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(icicle: Bundle?) {
|
override fun onCreate(icicle: Bundle?) {
|
||||||
super.onCreate(icicle)
|
super.onCreate(icicle)
|
||||||
addPreferencesFromResource(R.xml.prefs_screen_advanced)
|
addPreferencesFromResource(R.xml.prefs_screen_advanced)
|
||||||
|
@ -87,7 +104,7 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
||||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
.setType("application/octet-stream")
|
.setType("application/octet-stream")
|
||||||
startActivityForResult(intent, REQUEST_CODE_GESTURE_LIBRARY)
|
libraryFilePicker.launch(intent)
|
||||||
}
|
}
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
libfile = File(requireContext().filesDir.absolutePath + File.separator + JniLibName.JNI_LIB_IMPORT_FILE_NAME)
|
libfile = File(requireContext().filesDir.absolutePath + File.separator + JniLibName.JNI_LIB_IMPORT_FILE_NAME)
|
||||||
|
@ -101,16 +118,6 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, result: Intent?) {
|
|
||||||
val uri = result?.data
|
|
||||||
if (resultCode != Activity.RESULT_OK || uri == null) return
|
|
||||||
when (requestCode) {
|
|
||||||
REQUEST_CODE_GESTURE_LIBRARY -> copyLibrary(uri)
|
|
||||||
REQUEST_CODE_BACKUP -> backup(uri)
|
|
||||||
REQUEST_CODE_RESTORE -> restore(uri)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun copyLibrary(uri: Uri) {
|
private fun copyLibrary(uri: Uri) {
|
||||||
if (libfile == null) return
|
if (libfile == null) return
|
||||||
try {
|
try {
|
||||||
|
@ -135,14 +142,14 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
||||||
.replace(" ", "_") + "_backup.zip"
|
.replace(" ", "_") + "_backup.zip"
|
||||||
)
|
)
|
||||||
.setType("application/zip")
|
.setType("application/zip")
|
||||||
startActivityForResult(intent, REQUEST_CODE_BACKUP)
|
backupFilePicker.launch(intent)
|
||||||
}
|
}
|
||||||
.setPositiveButton(android.R.string.cancel, null)
|
.setPositiveButton(android.R.string.cancel, null)
|
||||||
.setNeutralButton(R.string.button_restore) { _, _ ->
|
.setNeutralButton(R.string.button_restore) { _, _ ->
|
||||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
.setType("application/zip")
|
.setType("application/zip")
|
||||||
startActivityForResult(intent, REQUEST_CODE_RESTORE)
|
restoreFilePicker.launch(intent)
|
||||||
}
|
}
|
||||||
.show()
|
.show()
|
||||||
return true
|
return true
|
||||||
|
@ -232,7 +239,3 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val REQUEST_CODE_GESTURE_LIBRARY = 570289
|
|
||||||
private const val REQUEST_CODE_BACKUP = 98665973
|
|
||||||
private const val REQUEST_CODE_RESTORE = 98665974
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.InputMethodSubtype
|
import android.view.inputmethod.InputMethodSubtype
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.widget.SwitchCompat
|
import androidx.appcompat.widget.SwitchCompat
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
|
@ -35,6 +36,12 @@ class LanguageSettingsFragment : Fragment(R.layout.language_settings) {
|
||||||
private lateinit var systemOnlySwitch: SwitchCompat
|
private lateinit var systemOnlySwitch: SwitchCompat
|
||||||
private val dictionaryLocales by lazy { getDictionaryLocales(requireContext()).mapTo(HashSet()) { it.languageConsideringZZ() } }
|
private val dictionaryLocales by lazy { getDictionaryLocales(requireContext()).mapTo(HashSet()) { it.languageConsideringZZ() } }
|
||||||
|
|
||||||
|
private val dictionaryFilePicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (it.resultCode != Activity.RESULT_OK) return@registerForActivityResult
|
||||||
|
val uri = it.data?.data ?: return@registerForActivityResult
|
||||||
|
listener?.onNewDictionary(uri)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
sharedPreferences = DeviceProtectedUtils.getSharedPreferences(requireContext())
|
sharedPreferences = DeviceProtectedUtils.getSharedPreferences(requireContext())
|
||||||
|
@ -185,12 +192,7 @@ class LanguageSettingsFragment : Fragment(R.layout.language_settings) {
|
||||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
.setType("application/octet-stream")
|
.setType("application/octet-stream")
|
||||||
startActivityForResult(intent, DICTIONARY_REQUEST_CODE)
|
dictionaryFilePicker.launch(intent)
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
|
||||||
if (resultCode == Activity.RESULT_OK && requestCode == DICTIONARY_REQUEST_CODE)
|
|
||||||
listener?.onNewDictionary(resultData?.data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -216,5 +218,4 @@ private fun Locale.languageConsideringZZ(): String {
|
||||||
language
|
language
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val DICTIONARY_REQUEST_CODE = 96834
|
|
||||||
const val USER_DICTIONARY_SUFFIX = "user.dict"
|
const val USER_DICTIONARY_SUFFIX = "user.dict"
|
||||||
|
|
|
@ -17,6 +17,8 @@ import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
@ -51,7 +53,6 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
private static final int MENU_ABOUT = Menu.FIRST;
|
private static final int MENU_ABOUT = Menu.FIRST;
|
||||||
// The second menu item id and order.
|
// The second menu item id and order.
|
||||||
private static final int MENU_HELP_AND_FEEDBACK = Menu.FIRST + 1;
|
private static final int MENU_HELP_AND_FEEDBACK = Menu.FIRST + 1;
|
||||||
private static final int CRASH_REPORT_REQUEST_CODE = 985287532;
|
|
||||||
// for storing crash report files, so onActivityResult can actually use them
|
// for storing crash report files, so onActivityResult can actually use them
|
||||||
private final ArrayList<File> crashReportFiles = new ArrayList<>();
|
private final ArrayList<File> crashReportFiles = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -166,7 +167,7 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
intent.putExtra(Intent.EXTRA_TITLE, "crash_reports.zip");
|
intent.putExtra(Intent.EXTRA_TITLE, "crash_reports.zip");
|
||||||
intent.setType("application/zip");
|
intent.setType("application/zip");
|
||||||
startActivityForResult(intent, CRASH_REPORT_REQUEST_CODE);
|
crashReportFilePicker.launch(intent);
|
||||||
})
|
})
|
||||||
.setNeutralButton("delete", (dialogInterface, i) -> {
|
.setNeutralButton("delete", (dialogInterface, i) -> {
|
||||||
for (File file : crashReportFiles) {
|
for (File file : crashReportFiles) {
|
||||||
|
@ -177,17 +178,19 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
final ActivityResultLauncher<Intent> crashReportFilePicker = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), (intent) -> {
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
if (intent.getResultCode() != Activity.RESULT_OK || intent.getData() == null) return;
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
final Uri uri = intent.getData().getData();
|
||||||
if (resultCode != Activity.RESULT_OK || data == null) return;
|
if (uri != null)
|
||||||
if (requestCode != CRASH_REPORT_REQUEST_CODE) return;
|
saveCrashReport(uri);
|
||||||
if (crashReportFiles.isEmpty()) return;
|
});
|
||||||
final Uri uri = data.getData();
|
|
||||||
if (uri == null) return;
|
private void saveCrashReport(final Uri uri) {
|
||||||
|
if (uri == null || crashReportFiles.isEmpty()) return;
|
||||||
final OutputStream os;
|
final OutputStream os;
|
||||||
try {
|
try {
|
||||||
os = requireContext().getContentResolver().openOutputStream(uri);
|
os = requireContext().getContentResolver().openOutputStream(uri);
|
||||||
|
if (os == null) return;
|
||||||
final BufferedOutputStream bos = new BufferedOutputStream(os);
|
final BufferedOutputStream bos = new BufferedOutputStream(os);
|
||||||
final ZipOutputStream z = new ZipOutputStream(bos);
|
final ZipOutputStream z = new ZipOutputStream(bos);
|
||||||
for (File file : crashReportFiles) {
|
for (File file : crashReportFiles) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue