mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-16 23:12:47 +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.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.preference.Preference
|
||||
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.BuildConfig
|
||||
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.common.FileUtils
|
||||
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?
|
||||
) }
|
||||
|
||||
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?) {
|
||||
super.onCreate(icicle)
|
||||
addPreferencesFromResource(R.xml.prefs_screen_advanced)
|
||||
|
@ -87,7 +104,7 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
|||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/octet-stream")
|
||||
startActivityForResult(intent, REQUEST_CODE_GESTURE_LIBRARY)
|
||||
libraryFilePicker.launch(intent)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
libfile = File(requireContext().filesDir.absolutePath + File.separator + JniLibName.JNI_LIB_IMPORT_FILE_NAME)
|
||||
|
@ -101,16 +118,6 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
|||
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) {
|
||||
if (libfile == null) return
|
||||
try {
|
||||
|
@ -135,14 +142,14 @@ class AdvancedSettingsFragment : SubScreenFragment() {
|
|||
.replace(" ", "_") + "_backup.zip"
|
||||
)
|
||||
.setType("application/zip")
|
||||
startActivityForResult(intent, REQUEST_CODE_BACKUP)
|
||||
backupFilePicker.launch(intent)
|
||||
}
|
||||
.setPositiveButton(android.R.string.cancel, null)
|
||||
.setNeutralButton(R.string.button_restore) { _, _ ->
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/zip")
|
||||
startActivityForResult(intent, REQUEST_CODE_RESTORE)
|
||||
restoreFilePicker.launch(intent)
|
||||
}
|
||||
.show()
|
||||
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.ViewGroup
|
||||
import android.view.inputmethod.InputMethodSubtype
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
import androidx.core.content.edit
|
||||
|
@ -35,6 +36,12 @@ class LanguageSettingsFragment : Fragment(R.layout.language_settings) {
|
|||
private lateinit var systemOnlySwitch: SwitchCompat
|
||||
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?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
sharedPreferences = DeviceProtectedUtils.getSharedPreferences(requireContext())
|
||||
|
@ -185,12 +192,7 @@ class LanguageSettingsFragment : Fragment(R.layout.language_settings) {
|
|||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/octet-stream")
|
||||
startActivityForResult(intent, DICTIONARY_REQUEST_CODE)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
if (resultCode == Activity.RESULT_OK && requestCode == DICTIONARY_REQUEST_CODE)
|
||||
listener?.onNewDictionary(resultData?.data)
|
||||
dictionaryFilePicker.launch(intent)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -216,5 +218,4 @@ private fun Locale.languageConsideringZZ(): String {
|
|||
language
|
||||
}
|
||||
|
||||
private const val DICTIONARY_REQUEST_CODE = 96834
|
||||
const val USER_DICTIONARY_SUFFIX = "user.dict"
|
||||
|
|
|
@ -17,6 +17,8 @@ import android.view.MenuInflater;
|
|||
import android.view.MenuItem;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
|
@ -51,7 +53,6 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
|||
private static final int MENU_ABOUT = Menu.FIRST;
|
||||
// The second menu item id and order.
|
||||
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
|
||||
private final ArrayList<File> crashReportFiles = new ArrayList<>();
|
||||
|
||||
|
@ -166,7 +167,7 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
|||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.putExtra(Intent.EXTRA_TITLE, "crash_reports.zip");
|
||||
intent.setType("application/zip");
|
||||
startActivityForResult(intent, CRASH_REPORT_REQUEST_CODE);
|
||||
crashReportFilePicker.launch(intent);
|
||||
})
|
||||
.setNeutralButton("delete", (dialogInterface, i) -> {
|
||||
for (File file : crashReportFiles) {
|
||||
|
@ -177,17 +178,19 @@ public final class SettingsFragment extends PreferenceFragmentCompat {
|
|||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode != Activity.RESULT_OK || data == null) return;
|
||||
if (requestCode != CRASH_REPORT_REQUEST_CODE) return;
|
||||
if (crashReportFiles.isEmpty()) return;
|
||||
final Uri uri = data.getData();
|
||||
if (uri == null) return;
|
||||
final ActivityResultLauncher<Intent> crashReportFilePicker = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), (intent) -> {
|
||||
if (intent.getResultCode() != Activity.RESULT_OK || intent.getData() == null) return;
|
||||
final Uri uri = intent.getData().getData();
|
||||
if (uri != null)
|
||||
saveCrashReport(uri);
|
||||
});
|
||||
|
||||
private void saveCrashReport(final Uri uri) {
|
||||
if (uri == null || crashReportFiles.isEmpty()) return;
|
||||
final OutputStream os;
|
||||
try {
|
||||
os = requireContext().getContentResolver().openOutputStream(uri);
|
||||
if (os == null) return;
|
||||
final BufferedOutputStream bos = new BufferedOutputStream(os);
|
||||
final ZipOutputStream z = new ZipOutputStream(bos);
|
||||
for (File file : crashReportFiles) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue