From e24b68520a09d5a06307b72c54a2220dd2bf90ac Mon Sep 17 00:00:00 2001 From: Gk40002148 Date: Fri, 22 Dec 2023 23:38:16 +0900 Subject: [PATCH] =?UTF-8?q?=E6=97=A7=E3=82=A2=E3=83=97=E3=83=AA=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=82=A4=E3=83=B3=E6=83=85=E5=A0=B1=E7=AD=89=E3=81=AE?= =?UTF-8?q?=E5=BC=95=E7=B6=99=E3=81=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agileworks/model/DeviceInfoRepository.kt | 8 +++ .../model/OldSharedPreferenceRepository.kt | 59 +++++++++++++++++++ .../agileworks/view/ui/login/LoginActivity.kt | 35 +++++++++++ 3 files changed, 102 insertions(+) create mode 100644 app/src/main/java/jp/atled/agileworks/model/OldSharedPreferenceRepository.kt diff --git a/app/src/main/java/jp/atled/agileworks/model/DeviceInfoRepository.kt b/app/src/main/java/jp/atled/agileworks/model/DeviceInfoRepository.kt index fd1cc610..bece3c3d 100644 --- a/app/src/main/java/jp/atled/agileworks/model/DeviceInfoRepository.kt +++ b/app/src/main/java/jp/atled/agileworks/model/DeviceInfoRepository.kt @@ -31,6 +31,14 @@ class DeviceInfoRepository(_serverNumber: Int? = null) { return if (deviceId >= 0) { deviceId } else { null } } + // 旧情報引継ぎ用 + fun setDeviceInfo(deviceId: Int, fcmToken: String) { + prefs.edit() + .putInt(AwApp.DEVICE_ID, deviceId) + .putString(AwApp.DEVICE_FCM_TOKEN, fcmToken) + .apply() + } + // 何らかの理由で FCM Token が登録したものとずれていないかチェックするために FCM のサービスに記録されているものとの比較も行う fun loadOrCreateDeviceId(activity: Activity, fcmToken: String, onResult: (isSuccess: Boolean, deviceId: Int?) -> Unit) { val deviceId = prefs.getInt(AwApp.DEVICE_ID, -1) diff --git a/app/src/main/java/jp/atled/agileworks/model/OldSharedPreferenceRepository.kt b/app/src/main/java/jp/atled/agileworks/model/OldSharedPreferenceRepository.kt new file mode 100644 index 00000000..996db1d2 --- /dev/null +++ b/app/src/main/java/jp/atled/agileworks/model/OldSharedPreferenceRepository.kt @@ -0,0 +1,59 @@ +package jp.atled.agileworks.model + +import android.content.Context +import jp.atled.agileworks.AwApp +import jp.atled.agileworks.widget.WidgetUpdate +import net.openid.appauth.AuthState + +class OldSharedPreferenceRepository { + fun loadAuthState(): AuthState { + val prefs = AwApp.instance.applicationContext.getSharedPreferences(AwApp.APP_AUTH_PREFERENCES, Context.MODE_PRIVATE) + val data = decryptString(prefs.getString(AwApp.APP_AUTH_STATE, null)) ?: "{}" + return AuthState.jsonDeserialize(data) + } + fun loadServerUrl(): String { + val prefs = AwApp.instance.applicationContext.getSharedPreferences(AwApp.APP_AUTH_PREFERENCES, Context.MODE_PRIVATE) + return prefs.getString(AwApp.APP_SERVER_DOMAIN, null)?.stripScheme().orEmpty() + } + fun loadServerContext(): String { + val prefs = AwApp.instance.applicationContext.getSharedPreferences(AwApp.APP_AUTH_PREFERENCES, Context.MODE_PRIVATE) + return prefs.getString(AwApp.APP_SERVER_CONTEXT, "").orEmpty() + } + + fun loadDeviceId(): Int { + val prefs = AwApp.instance.applicationContext.getSharedPreferences(AwApp.DEVICE_INFO_PREFERENCES, Context.MODE_PRIVATE) + return prefs.getInt(AwApp.DEVICE_ID, -1) + } + + fun loadDeviceFcmToken(): String? { + val prefs = AwApp.instance.applicationContext.getSharedPreferences(AwApp.DEVICE_INFO_PREFERENCES, Context.MODE_PRIVATE) + return prefs.getString(AwApp.DEVICE_FCM_TOKEN, null) + + } + + fun loadSessionId(): String { + val cookiePref = AwApp.instance.applicationContext.getSharedPreferences("cookie", Context.MODE_PRIVATE) + return cookiePref.getString("sessionId", "") ?: "" + } + fun loadClientCertAlias(): String { + val certPref = AwApp.instance.getSharedPreferences(AwApp.CERT_PREFERENCES, Context.MODE_PRIVATE) + return certPref.getString(AwApp.CERT_CLIENT_CERT_ALIAS, "") ?: "" + } + fun clear() { + AwApp.instance.applicationContext.getSharedPreferences(AwApp.APP_AUTH_PREFERENCES, Context.MODE_PRIVATE) + .edit() + .remove(AwApp.APP_AUTH_STATE) + .apply() + WidgetUpdate.update() + } + + + + // 以前のバージョンでは "https://" が付いていたので取り除く。 + private fun String.stripScheme(): String = OldSharedPreferenceRepository.SCHEME_PATTERN.replaceFirst(this, "") + + companion object { + private val SCHEME_PATTERN = Regex("^https?://") + } + +} \ No newline at end of file diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt index 0606193a..58de26d8 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginActivity.kt @@ -14,7 +14,9 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat +import jp.atled.agileworks.AwApp import jp.atled.agileworks.R +import jp.atled.agileworks.model.* import jp.atled.agileworks.view.ui.toDeepLinkArguments import jp.atled.agileworks.view.ui.toDirectOpenArguments import kotlinx.android.synthetic.main.fragment_login.* @@ -27,11 +29,44 @@ class LoginActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) + // サーバ情報引継ぎ + updateServerSettings() + supportFragmentManager.beginTransaction() .replace(R.id.frameLayout, loginFragment()) .commit() } + private fun updateServerSettings() { + // 旧バージョンのログイン情報を引き継ぐ + // 旧SharedPreference に保存されている内容を、0番目のSharedPreference にコピーして、旧SharedPreference情報をクリアする + if (OldSharedPreferenceRepository().loadAuthState().isAuthorized) { + //var oldServerInfo: OldSharedPreferenceRepository = OldSharedPreferenceRepository() + // サーバリストへ追加 + ServerRepository().removeServerList() + ServerRepository().addServerList() + // 各種情報の保存 + AuthStateRepository().setAuthState(OldSharedPreferenceRepository().loadAuthState()) + LoginRepository().setServerUrl(OldSharedPreferenceRepository().loadServerUrl()) + LoginRepository().setServerContext(OldSharedPreferenceRepository().loadServerContext()) + if (OldSharedPreferenceRepository().loadDeviceId() >= 0) { + DeviceInfoRepository().setDeviceInfo(OldSharedPreferenceRepository().loadDeviceId(), OldSharedPreferenceRepository().loadDeviceFcmToken()!!) + } + // セッションID保存 + var preferences = "cookie" + ServerRepository().loadServer().toString() + AwApp.instance.applicationContext.getSharedPreferences( + preferences, + Context.MODE_PRIVATE + ) + .edit() + .putString("sessionId", OldSharedPreferenceRepository().loadSessionId()) + .apply() + + // 旧情報削除 + OldSharedPreferenceRepository().clear() + } + } + private fun loginFragment(): LoginFragment = LoginFragment().apply { arguments = Bundle().apply { putAll(intent.toDirectOpenArguments()) -- GitLab