BasePreferenceHelper.kt 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. package com.vpn.fastestvpnservice.helpers
  2. import android.app.Activity
  3. import android.content.Context
  4. import android.graphics.drawable.AdaptiveIconDrawable
  5. import android.graphics.drawable.Drawable
  6. import android.util.Log
  7. import com.google.gson.Gson
  8. import com.google.gson.GsonBuilder
  9. import com.google.gson.reflect.TypeToken
  10. import com.vpn.fastestvpnservice.R
  11. import com.vpn.fastestvpnservice.beans.*
  12. import com.vpn.fastestvpnservice.constants.AppEnum
  13. import com.vpn.fastestvpnservice.constants.splitList
  14. class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
  15. fun clearAllData() {
  16. removePreference(context, KEY_FILENAME, KEY_USER)
  17. removePreference(context, KEY_FILENAME, KEY_USER_PASSWORD)
  18. removePreference(context, KEY_FILENAME, KEY_SERVERS_DATA)
  19. // removePreference(context, KEY_FILENAME, KEY_SERVERS)
  20. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS)
  21. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NO_VPN)
  22. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NOT_ALLOW)
  23. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL)
  24. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_TV)
  25. removePreference(context, KEY_FILENAME, PROTOCOL)
  26. removePreference(context, KEY_FILENAME, X_PLATFORM_TOKEN)
  27. removePreference(context, KEY_FILENAME, KEY_PRODUCT)
  28. removePreference(context, KEY_FILENAME, KEY_AVAILABLE_PROTOCOLS)
  29. removePreference(context, KEY_FILENAME, KEY_ENABLED_PROTOCOLS)
  30. removePreference(context, KEY_FILENAME, KEY_WIREGUARD)
  31. removePreference(context, KEY_FILENAME, KEY_FEATURES_DATA)
  32. removePreference(context, KEY_FILENAME, KEY_SPLIT_ENABLE_TV)
  33. removePreference(context, KEY_FILENAME, KEY_SPLIT_DISABLE_TV)
  34. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_ENTRY)
  35. removePreference(context, KEY_FILENAME, TV_SPLIT_CLASS)
  36. removePreference(context, KEY_FILENAME, KEY_ADBLOCK_SWITCH)
  37. removePreference(context, KEY_FILENAME, KEY_ISLOGGEDIN)
  38. removePreference(context, KEY_FILENAME, THEME)
  39. removePreference(context, KEY_FILENAME, KEY_ISCONNECT)
  40. removePreference(context, KEY_FILENAME, KEY_SPLIT_POS)
  41. }
  42. fun saveUser(user: UserResponse) {
  43. putStringPreference(context, KEY_FILENAME, KEY_USER, Gson().toJson(user))
  44. }
  45. fun getUser(): UserResponse? {
  46. return Gson().fromJson<UserResponse>(
  47. getStringPreference(context, KEY_FILENAME, KEY_USER), UserResponse::class.java
  48. )
  49. }
  50. fun saveProduct(product: Product) {
  51. putStringPreference(context, KEY_FILENAME, KEY_PRODUCT, Gson().toJson(product))
  52. }
  53. fun getProduct(): Product? {
  54. return Gson().fromJson<Product>(
  55. getStringPreference(context, KEY_FILENAME, KEY_PRODUCT), Product::class.java
  56. )
  57. }
  58. fun saveWireGuard(wireGuard: WireGuard) {
  59. putStringPreference(context, KEY_FILENAME, KEY_WIREGUARD, Gson().toJson(wireGuard))
  60. }
  61. fun getWireGuard(): WireGuard? {
  62. return Gson().fromJson<WireGuard>(
  63. getStringPreference(context, KEY_FILENAME, KEY_WIREGUARD), WireGuard::class.java
  64. )
  65. }
  66. fun saveIpInfo(ipInfo: IpInfo) {
  67. putStringPreference(context, KEY_FILENAME, KEY_IPINFO, Gson().toJson(ipInfo))
  68. }
  69. fun getIpinfo(): IpInfo? {
  70. return Gson().fromJson<IpInfo>(
  71. getStringPreference(context, KEY_FILENAME, KEY_IPINFO), IpInfo::class.java
  72. )
  73. }
  74. fun savePassword(pass: String) {
  75. putStringPreference(context, KEY_FILENAME, KEY_USER_PASSWORD, pass)
  76. }
  77. fun getPassword(): String {
  78. return getStringPreference(context, KEY_FILENAME, KEY_USER_PASSWORD)
  79. }
  80. fun saveServerData(list: ArrayList<ServerData>) {
  81. putStringPreference(context, KEY_FILENAME, KEY_SERVERS_DATA, Gson().toJson(list))
  82. }
  83. fun getServerData(): ArrayList<ServerData> {
  84. val type = object : TypeToken<ArrayList<ServerData?>?>() {}.type
  85. return Gson().fromJson<ArrayList<ServerData>>(
  86. getStringPreference(
  87. context, KEY_FILENAME, KEY_SERVERS_DATA
  88. ), type
  89. )
  90. }
  91. fun saveFeaturesData(list: ArrayList<ProductFeatures>) {
  92. putStringPreference(context, KEY_FILENAME, KEY_FEATURES_DATA, Gson().toJson(list))
  93. }
  94. fun getFeaturesData(): List<ProductFeatures> {
  95. val type = object : TypeToken<List<ProductFeatures?>?>() {}.type
  96. return Gson().fromJson<List<ProductFeatures>>(
  97. getStringPreference(
  98. context, KEY_FILENAME, KEY_FEATURES_DATA
  99. ), type
  100. )
  101. }
  102. fun saveEnabledProtocols(list: ArrayList<String>) {
  103. putStringPreference(context, KEY_FILENAME, KEY_ENABLED_PROTOCOLS, Gson().toJson(list))
  104. }
  105. fun getEnabledProtocols(): ArrayList<String> {
  106. val type = object : TypeToken<ArrayList<String?>?>() {}.type
  107. try {
  108. return Gson().fromJson<ArrayList<String>>(
  109. getStringPreference(
  110. context, KEY_FILENAME, KEY_ENABLED_PROTOCOLS
  111. ), type
  112. )
  113. }
  114. catch (e: Exception) {
  115. val tempList = ArrayList<String>()
  116. tempList.add("WG")
  117. tempList.add("IKEV2")
  118. tempList.add("TCP")
  119. tempList.add("UDP")
  120. return tempList
  121. }
  122. }
  123. fun saveAvailableProtocols(list: ArrayList<String>) {
  124. var tempList = ArrayList<String>()
  125. if (list.contains(AppEnum.WG_PROTOCOL.key)) {
  126. tempList.add(AppEnum.WG_PROTOCOL.key)
  127. }
  128. if (list.contains(AppEnum.IKEV2_PROTOCOL.key)) {
  129. tempList.add(AppEnum.IKEV2_PROTOCOL.key)
  130. }
  131. if (list.contains(AppEnum.TCP_PROTOCOL.key)) {
  132. tempList.add(AppEnum.TCP_PROTOCOL.key)
  133. }
  134. if (list.contains(AppEnum.UDP_PROTOCOL.key)) {
  135. tempList.add(AppEnum.UDP_PROTOCOL.key)
  136. }
  137. putStringPreference(context, KEY_FILENAME, KEY_AVAILABLE_PROTOCOLS, Gson().toJson(tempList))
  138. }
  139. fun getAvailableProtocols(): ArrayList<String> {
  140. val type = object : TypeToken<ArrayList<String?>?>() {}.type
  141. return try {
  142. Gson().fromJson<ArrayList<String>>(
  143. getStringPreference(
  144. context, KEY_FILENAME, KEY_AVAILABLE_PROTOCOLS
  145. ), type
  146. )
  147. } catch (e: Exception) {
  148. val tempList = ArrayList<String>()
  149. tempList.add("WG")
  150. tempList.add("IKEV2")
  151. tempList.add("TCP")
  152. tempList.add("UDP")
  153. return tempList
  154. }
  155. }
  156. fun getEnableTvAppsSplit(): ArrayList<TvEnableApps>? {
  157. val type = object : TypeToken<ArrayList<TvEnableApps?>?>() {}.type
  158. return Gson().fromJson<ArrayList<TvEnableApps>>(
  159. getStringPreference(
  160. context, KEY_FILENAME, KEY_SPLIT_ENABLE_TV
  161. ), type
  162. )
  163. }
  164. fun setEnableTvAppsSplit(allSplitTunnelEnabled: ArrayList<TvEnableApps>?) {
  165. if (allSplitTunnelEnabled == null) {
  166. removePreference(context, KEY_FILENAME, KEY_SPLIT_ENABLE_TV)
  167. return
  168. }
  169. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_ENABLE_TV, Gson().toJson(allSplitTunnelEnabled))
  170. }
  171. fun getDisableTvAppsSplit(): ArrayList<TvDisableApps>? {
  172. val type = object : TypeToken<ArrayList<TvDisableApps?>?>() {}.type
  173. return Gson().fromJson<ArrayList<TvDisableApps>>(
  174. getStringPreference(
  175. context, KEY_FILENAME, KEY_SPLIT_DISABLE_TV
  176. ), type
  177. )
  178. }
  179. fun setDisableTvAppsSplit(allSplitTunnelEnabled: ArrayList<TvDisableApps>?) {
  180. if (allSplitTunnelEnabled == null) {
  181. removePreference(context, KEY_FILENAME, KEY_SPLIT_DISABLE_TV)
  182. return
  183. }
  184. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_DISABLE_TV, Gson().toJson(allSplitTunnelEnabled))
  185. }
  186. fun getSplitTunnelTvAppsName(): ArrayList<String>? {
  187. val type = object : TypeToken<ArrayList<String?>?>() {}.type
  188. return Gson().fromJson<ArrayList<String>>(
  189. getStringPreference(
  190. context, KEY_FILENAME, KEY_SPLIT_TUNNEL
  191. ), type
  192. )
  193. }
  194. fun setSplitTunnelTvAppsName(allSplitTunnelEnabled: ArrayList<String>?) {
  195. if (allSplitTunnelEnabled == null) {
  196. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL)
  197. return
  198. }
  199. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL, Gson().toJson(allSplitTunnelEnabled))
  200. }
  201. fun getSplitTunnelTvAppsPackageName(): ArrayList<String>? {
  202. val type = object : TypeToken<ArrayList<String?>?>() {}.type
  203. return Gson().fromJson<ArrayList<String>>(
  204. getStringPreference(
  205. context, KEY_FILENAME, KEY_SPLIT_TUNNEL_TV
  206. ), type
  207. )
  208. }
  209. fun setSplitTunnelTvAppsPackageName(allSplitTunnelEnabled: ArrayList<String>?) {
  210. if (allSplitTunnelEnabled == null) {
  211. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_TV)
  212. return
  213. }
  214. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_TV, Gson().toJson(allSplitTunnelEnabled))
  215. }
  216. fun getSplitTunnelTvAppsEntry(): ArrayList<String>? {
  217. val type = object : TypeToken<ArrayList<String?>?>() {}.type
  218. return Gson().fromJson<ArrayList<String>>(
  219. getStringPreference(
  220. context, KEY_FILENAME, KEY_SPLIT_TUNNEL_ENTRY
  221. ), type
  222. )
  223. }
  224. fun setSplitTunnelTvAppsEntry(appsEntry: ArrayList<String>?) {
  225. if (appsEntry == null) {
  226. removePreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_ENTRY)
  227. return
  228. }
  229. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_TUNNEL_ENTRY, Gson().toJson(appsEntry))
  230. }
  231. fun setInstanceActivity(activity: Activity){
  232. putStringPreference(context, KEY_FILENAME, KEY_ACTIVITY, Gson().toJson(activity))
  233. }
  234. fun getInstanceActivity(): Activity? {
  235. var activity: Activity? = null
  236. val mainActivity = getStringPreference(context, KEY_FILENAME, KEY_ACTIVITY)
  237. if (mainActivity != null){
  238. val gson = GsonBuilder().create()
  239. activity = gson.fromJson(mainActivity, Activity::class.java)
  240. }
  241. return activity
  242. }
  243. fun getServerObject(): Server? {
  244. var serverObj: Server? = null
  245. val serverObjStr: String = getStringPreference(context, KEY_FILENAME, KEY_SERVERS)
  246. if (serverObjStr != null) {
  247. val gson = GsonBuilder().create()
  248. serverObj = gson.fromJson(serverObjStr, Server::class.java)
  249. }
  250. return serverObj
  251. }
  252. fun setServerObject(serverObj: Server?) {
  253. putStringPreference(context, KEY_FILENAME, KEY_SERVERS, Gson().toJson(serverObj))
  254. }
  255. fun getSplitTunneledApps(): String? {
  256. return getStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS)
  257. }
  258. fun setSplitTunneledApps(selectedApps: String?) {
  259. if (selectedApps == null) {
  260. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS)
  261. return
  262. }
  263. putStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS, selectedApps)
  264. }
  265. fun getSplitTunneledAppsNoVpn(): String? {
  266. return getStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NO_VPN)
  267. }
  268. fun setSplitTunneledAppsNoVpn(selectedApps: String?) {
  269. if (selectedApps == null) {
  270. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NO_VPN)
  271. return
  272. }
  273. putStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NO_VPN, selectedApps)
  274. }
  275. fun getSplitTunneledAppsNotAllow(): String? {
  276. return getStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NOT_ALLOW)
  277. }
  278. fun setSplitTunneledAppsNotAllow(selectedApps: String?) {
  279. if (selectedApps == null) {
  280. removePreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NOT_ALLOW)
  281. return
  282. }
  283. putStringPreference(context, KEY_FILENAME, KEY_SELECTED_APPS_NOT_ALLOW, selectedApps)
  284. }
  285. fun saveAppDetails(appDetails: String) {
  286. putStringPreference(context, KEY_FILENAME, APP_DETAILS, appDetails)
  287. }
  288. fun getAppDetails(): String {
  289. return getStringPreference(context, KEY_FILENAME, APP_DETAILS)
  290. }
  291. fun saveFileDetails(fileDetails: String) {
  292. putStringPreference(context, KEY_FILENAME, FILE_DETAILS, fileDetails)
  293. }
  294. fun getFileDetails(): String {
  295. return getStringPreference(context, KEY_FILENAME, FILE_DETAILS)
  296. }
  297. fun saveTheme(theme: String) {
  298. putStringPreference(context, KEY_FILENAME, THEME, theme)
  299. }
  300. fun getTheme(): String {
  301. return getStringPreference(context, KEY_FILENAME, THEME)
  302. }
  303. fun saveTvSplitTunnel(tvSplitTunneling: ArrayList<TvSplitTunneling>) {
  304. putStringPreference(context, KEY_FILENAME, TV_SPLIT_CLASS, Gson().toJson(tvSplitTunneling))
  305. }
  306. fun getTvSplitTunnel(): ArrayList<TvSplitTunneling> {
  307. val tvSplitTunneling = Gson().fromJson<ArrayList<TvSplitTunneling>>(
  308. getStringPreference(context, KEY_FILENAME, TV_SPLIT_CLASS), TvSplitTunneling::class.java
  309. )
  310. return tvSplitTunneling
  311. }
  312. fun saveProtocol(protocol: Protocol) {
  313. putStringPreference(context, KEY_FILENAME, PROTOCOL, Gson().toJson(protocol))
  314. }
  315. fun getProtocol(): Protocol {
  316. var protocol = Gson().fromJson<Protocol>(
  317. getStringPreference(context, KEY_FILENAME, PROTOCOL), Protocol::class.java
  318. )
  319. protocol?.let {
  320. return protocol
  321. } ?: kotlin.run {
  322. return Protocol(
  323. AppEnum.WG_PROTOCOL.title, AppEnum.WG_PROTOCOL.key, 1
  324. // AppEnum.AUTO_PROTOCOL.title, AppEnum.IKEV2_PROTOCOL.key, 0
  325. ) //By default (AUTO) Protocol is selected (index 0 = AUTO). Checking IKEV2 first then check TCP/UDP
  326. }
  327. }
  328. // fun saveRadioBtnSplitPos(position: Int) {
  329. // putIntegerPreference(context, KEY_FILENAME, KEY_SPLIT_POS, position)
  330. // }
  331. //
  332. // fun getRadioBtnSplitPos(): Int {
  333. // return getIntegerPreference(context, KEY_FILENAME, KEY_SPLIT_POS)
  334. // }
  335. fun saveAdBlockState(status: Boolean) {
  336. putBooleanPreference(context, KEY_FILENAME, KEY_ADBLOCK_SWITCH, status)
  337. }
  338. fun getAdBlockState(): Boolean {
  339. return getBooleanPreference(context, KEY_FILENAME, KEY_ADBLOCK_SWITCH)
  340. }
  341. fun saveFcmToken(token: String) {
  342. putStringPreference(context, KEY_FILENAME, KEY_FCM, token)
  343. }
  344. fun getLoggedInState(): Boolean {
  345. return getBooleanPreference(context, KEY_FILENAME, KEY_ISLOGGEDIN)
  346. }
  347. fun setLoggedInState(state: Boolean) {
  348. putBooleanPreference(context, KEY_FILENAME, KEY_ISLOGGEDIN, state)
  349. }
  350. fun getConnectState(): Boolean {
  351. return getBooleanPreference(context, KEY_FILENAME, KEY_ISCONNECT)
  352. }
  353. fun setConnectState(state: Boolean) {
  354. putBooleanPreference(context, KEY_FILENAME, KEY_ISCONNECT, state)
  355. }
  356. fun getFcmToken(): String {
  357. return getStringPreference(context, KEY_FILENAME, KEY_FCM)
  358. }
  359. fun saveXPlatformToken(token: String) {
  360. putStringPreference(context, KEY_FILENAME, X_PLATFORM_TOKEN, token)
  361. }
  362. fun getXPlatformToken(): String {
  363. return getStringPreference(context, KEY_FILENAME, X_PLATFORM_TOKEN)
  364. }
  365. fun saveSplitPosition(token: String) {
  366. putStringPreference(context, KEY_FILENAME, KEY_SPLIT_POS, token)
  367. }
  368. fun getSplitPosition(): String {
  369. try {
  370. return getStringPreference(context, KEY_FILENAME, KEY_SPLIT_POS)
  371. } catch (ex: Exception) {
  372. return splitList[0]
  373. }
  374. }
  375. companion object {
  376. private const val KEY_FILENAME = "file_fastestvpn"
  377. private const val KEY_USER = "keydata_user"
  378. private const val KEY_PRODUCT = "keydata_product"
  379. private const val KEY_WIREGUARD = "keydata_wireguard"
  380. private const val KEY_IPINFO = "keydata_ipinfo"
  381. private const val KEY_USER_PASSWORD = "keydata_user_password"
  382. private const val KEY_SERVERS_DATA = "keydata_servers_data"
  383. private const val KEY_FEATURES_DATA = "keydata_features_data"
  384. private const val KEY_ENABLED_PROTOCOLS = "keydata_enabled_protocols"
  385. private const val KEY_AVAILABLE_PROTOCOLS = "keydata_available_protocols"
  386. private const val KEY_SERVERS = "keydata_server"
  387. private const val KEY_SELECTED_APPS = "keydata_selectedApps"
  388. private const val KEY_SELECTED_APPS_NO_VPN = "keydata_selectedAppsNoVpn"
  389. private const val KEY_SELECTED_APPS_NOT_ALLOW = "keydata_selectedAppsNotAllow"
  390. private const val KEY_SPLIT_TUNNEL = "keydata_tv_apps_name"
  391. private const val KEY_SPLIT_TUNNEL_TV = "keydata_tv_apps_package_name"
  392. private const val KEY_SPLIT_ENABLE_TV = "keydata_tv_apps_enable"
  393. private const val KEY_SPLIT_DISABLE_TV = "keydata_tv_apps_disable"
  394. private const val KEY_SPLIT_TUNNEL_ENTRY = "keydata_tv_apps_entry"
  395. private const val APP_DETAILS = "keydata_app_detail"
  396. private const val FILE_DETAILS = "keydata_file_details"
  397. private const val PROTOCOL = "keydata_protocol"
  398. private const val TV_SPLIT_CLASS = "keydata_tvsplitclass"
  399. private const val X_PLATFORM_TOKEN = "keydata_x_platform_token"
  400. private const val KEY_FCM = "keydata_fcm"
  401. private const val KEY_SPLIT_POS = "keydata_split_pos"
  402. private const val KEY_ACTIVITY = "keydata_activity"
  403. private const val KEY_ADBLOCK_SWITCH = "keydata_adblock"
  404. private const val KEY_ISLOGGEDIN = "key_isloggedin"
  405. private const val THEME = "key_theme"
  406. private const val KEY_ISCONNECT = "keydata_isconnect"
  407. }
  408. }