package com.gh0u1l5.wechatmagician.frontend

import android.content.ContentProvider
import android.content.ContentValues
import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences
import android.database.Cursor
import android.database.MatrixCursor
import android.net.Uri
import com.gh0u1l5.wechatmagician.Global.PREFERENCE_NAME_DEVELOPER
import com.gh0u1l5.wechatmagician.Global.PREFERENCE_NAME_SETTINGS
import com.gh0u1l5.wechatmagician.util.IPCUtil.getProtectedSharedPreferences // PrefProvider shares the preferences using content provider model.
class PrefProvider : ContentProvider() { private val preferences: MutableMap<String, SharedPreferences> = mutableMapOf() private fun getPreferenceType(value: Any?): String {
return when (value) {
null -> "Null"
is Int -> "Int"
is Long -> "Long"
is Float -> "Float"
is Boolean -> "Boolean"
is String -> "String"
is Set<*> -> "StringSet"
else -> "${value::class.java}"
}
} override fun onCreate(): Boolean {
preferences[PREFERENCE_NAME_SETTINGS] =
context.getProtectedSharedPreferences(PREFERENCE_NAME_SETTINGS, MODE_PRIVATE)
preferences[PREFERENCE_NAME_DEVELOPER] =
context.getProtectedSharedPreferences(PREFERENCE_NAME_DEVELOPER, MODE_PRIVATE)
return true
} override fun getType(uri: Uri?): String? = null override fun insert(uri: Uri?, values: ContentValues?): Uri {
throw UnsupportedOperationException("Wechat Magician PrefProvider: Cannot modify read-only preferences!")
} override fun query(uri: Uri?, projection: Array<out String>?, selection: String?,
selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
if (uri == null) {
return null
}
val segments = uri.pathSegments
if (segments.size != 1) {
return null
}
val preference = preferences[segments[0]] ?: return null
return MatrixCursor(arrayOf("key", "value", "type")).apply {
preference.all.forEach { entry ->
val type = getPreferenceType(entry.value)
addRow(arrayOf(entry.key, entry.value, type))
}
}
} override fun update(uri: Uri?, values: ContentValues?, selection: String?,
selectionArgs: Array<out String>?): Int {
throw UnsupportedOperationException("Wechat Magician PrefProvider: Cannot modify read-only preferences!")
} override fun delete(uri: Uri?, selection: String?,
selectionArgs: Array<out String>?): Int {
throw UnsupportedOperationException("Wechat Magician PrefProvider: Cannot modify read-only preferences!")
}
}

prefProvider.kt的更多相关文章

  1. 项目总结笔记系列 Social Hub KT Session2

    KT Session2: 主要是代码的实现(KT is knowledge Transfer) 如图所示,在整个Social Hub项目中,我们的项目Data Feed Service处于承上启下的作 ...

  2. KT vs SKT [20160816]

    KT:索尔 SKT:茂凯,塔里克,卡西奥佩娅 普朗克+烬,大招开团. 塔里克保护,眩晕.

  3. KT板

    前言 好吧,我是学计算机的,现在的职位是网站美工,只是自己学了点PS.AI的,其实对材质什么的也不太了解.以下的一些信息,基本都是自己先网上查,最后找厂商确认的,不能保证完全精确,但求基本符合事实. ...

  4. 阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!

    作者| 阿里云技术专家 郑云龙(砧木) 目前越来越多的开发者开始采纳 Kubernetes 管理基础设施环境,并通过 Kubernetes 完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发 ...

  5. 模型监控指标- 混淆矩阵、ROC曲线,AUC值,KS曲线以及KS值、PSI值,Lift图,Gain图,KT值,迁移矩阵

    1. 混淆矩阵 确定截断点后,评价学习器性能 假设训练之初以及预测后,一个样本是正例还是反例是已经确定的,这个时候,样本应该有两个类别值,一个是真实的0/1,一个是预测的0/1 TP(实际为正预测为正 ...

  6. 软件工程导论-目录-K-T+RJ大

    目录 10 第1章 软件工程学概述/1 19 1.1 软件危机/1 19 1.1.1 软件危机的介绍/1 19 1.1.2 产生软件危机的原因/3 21 1.1.3 消除软件危机的途径/4 22 1. ...

  7. Social Media POC KT Session

    地址: 1. http://c0048925.itcs.hp.com:8080/datamining/report/brandfocus.html Social Media POC是针对Social ...

  8. 项目总结笔记系列 wsTax KT Session1

     项目总结笔记 1.专有名词解释: SMO, Separate Management Office. UAT, User Accept Test. GSLB, Global Server Load B ...

  9. 项目总结笔记系列 Autonomy IDOL Server KT Session1

    在说上面这个图之前,先说一下背景知识. Autonomy地址: http://www.autonomy.com.cn http://www.autonomy.com.cn/content/home/i ...

随机推荐

  1. 【Python】爬虫

    参考:http://www.cnblogs.com/fnng/p/3576154.html import urllib,re page = urllib.urlopen('http://trend.b ...

  2. Docker 开启 remoter api

    debian 环境: vi /lib/systemd/system/dcoker.service 修改: ExecStart=/usr/bin/dockerd -H fd://为 ExecStart= ...

  3. stm32 HAL库笔记(一)——串口的操作

    昨天分析了普通io口的使用,和初始化代码流程,回顾一下,首先定义一个配置io口功能的结构体,然后开启时钟,再去配置这个结构体里面的各个成员变量,每个成员变量都有很多种选择,可以看各个成员变量 后面的注 ...

  4. 使用TensorFlow训练模型的基本流程【转】

    原文地址(https://github.com/wmpscc/TensorflowBaseDemo ) 本篇文章将介绍使用tensorflow的训练模型的基本流程,包括制作读取TFRecord,训练和 ...

  5. Java解法-两数相加(Add Two Numbers)

    问题  给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...

  6. 编译安装redis4.0

    下载redis4.0的安装包:http://download.redis.io/releases/redis-4.0.11.tar.gz 这里用的是已经下载到电脑上,只需上传即可 解压缩 [root@ ...

  7. MongoDB基本语法

    建立连接 client = pymongo.MongoClient() 新建数据库 db = client["db_name"] 新建表 tble=db["table_n ...

  8. 一段自适应的CSS代码

    一段自适应HTML5的CSS代码,该代码在陕西特产使用过,手机端效果还好,就是PC端看起来没那么大气,比较窄屏 * { transition-property: all; -ms-transition ...

  9. 第四周博客作业 <西北师范大学| 周安伟>

    一,助教博客链接https://home.cnblogs.com/u/zaw-315/ 二,本周点评作业量点评23份,对提交的优秀作业代码进行运行一份博客问题无法点评问题博客链接:https://ww ...

  10. jquery 清空、添加、删除select

    $("#selectid").empty();//清空 $("#selectid").append("<option value='" ...