diff options
| author | 2023-03-16 13:22:09 -0400 | |
|---|---|---|
| committer | 2023-03-17 14:23:29 -0400 | |
| commit | 9f90b598713528b5a216c771acee7753ab10d953 (patch) | |
| tree | 3b04205ec544db7a03844c5cae5b02fd83b4d64d /java/src | |
| parent | f86a0bde4809b63efd2db49bfa0aa59cc4c96b35 (diff) | |
Adds a reciever for pin migration data
The receiver can only be contacted by a sender with the ADD_CHOOSER_PINS
permission to prevent a 3rd party from abusing the feature to inject a
pin.
Test: atest ChooserPinMigrationReceiverTest
BUG: 223249318
Change-Id: I3d796b40c50b64848f86398e532c3e18b0937e61
Diffstat (limited to 'java/src')
| -rw-r--r-- | java/src/com/android/intentresolver/ChooserPinMigrationReceiver.kt | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/java/src/com/android/intentresolver/ChooserPinMigrationReceiver.kt b/java/src/com/android/intentresolver/ChooserPinMigrationReceiver.kt new file mode 100644 index 00000000..a3ba2192 --- /dev/null +++ b/java/src/com/android/intentresolver/ChooserPinMigrationReceiver.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.intentresolver + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.util.Log + +/** + * Broadcast receiver for receiving Chooser pin data from the legacy chooser. + * + * Unions the legacy pins with any existing pins. This receiver is protected by the ADD_CHOOSER_PINS + * permission. The receiver is required to have the RECEIVE_CHOOSER_PIN_MIGRATION to receive the + * broadcast. + */ +class ChooserPinMigrationReceiver( + private val pinnedSharedPrefsProvider: (Context) -> SharedPreferences = + { context -> ChooserActivity.getPinnedSharedPrefs(context) }, +) : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + val bundle = intent.extras ?: return + Log.i(TAG, "Starting migration") + + val prefsEditor = pinnedSharedPrefsProvider.invoke(context).edit() + bundle.keySet().forEach { key -> + if(bundle.getBoolean(key)) { + prefsEditor.putBoolean(key, true) + } + } + prefsEditor.apply() + + Log.i(TAG, "Migration complete") + } + + companion object { + private const val TAG = "ChooserPinMigrationReceiver" + } +}
\ No newline at end of file |