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 fd1cc610e174893d9703d37289cafba65b42f0af..bece3c3db009eca75dd506b09e9caa2827dca131 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 0000000000000000000000000000000000000000..996db1d24d6c01065902697e8f77787c3f74f200 --- /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 0606193afebb02a639b983045a70b6b22f193dc4..58de26d853fd398185f445baa30c65832e5dc76d 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())