Commit 6bf7fa23 authored by wanglei's avatar wanglei

...

parent dec60fd7
......@@ -42,10 +42,6 @@ android {
release {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
// 设置是否要自动上传
firebaseCrashlytics {
mappingFileUploadEnabled = true
}
signingConfig = signingConfigs.getByName("release")
}
}
......@@ -63,6 +59,13 @@ android {
}
}
gradle.taskGraph.whenReady {
tasks.forEach { task ->
if (task.name.contains("uploadCrashlyticsMappingFile")) {
task.enabled = false
}
}
}
dependencies {
......
......@@ -21,9 +21,12 @@
#-renamesourcefileattribute SourceFile
-keep class com.base.scanqr.bean.** { *; }
-keep class com.google.gson.reflect.** { *; }
-keep class * extends com.google.gson.reflect.TypeToken
-keep class com.google.gson.stream.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keepattributes *Annotation*
-keep class * extends com.google.gson.TypeAdapter
-keep class * extends com.google.gson.JsonSerializer
-keep class * extends com.google.gson.Deserializer
-keep class com.google.gson.TypeAdapters{*;}
\ No newline at end of file
-keep class com.google.gson.TypeAdapters{*;}
-keep class com.bytedance.sdk.** { *; }
......@@ -5,8 +5,7 @@
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<!-- 获取wifi列表 -->
<!-- 获取wifi列表 --><!-- 获取wifi列表 --><!-- 获取wifi列表 --><!-- 获取wifi列表 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
......@@ -15,13 +14,12 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 前台服务 -->
<!-- 前台服务 --><!-- 前台服务 --><!-- 前台服务 --><!-- 前台服务 --><!-- 前台服务 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:name=".MyApplication"
......@@ -34,12 +32,7 @@
android:supportsRtl="true"
android:theme="@style/Theme.ScanQR"
tools:targetApi="31">
<activity
android:name=".ui.event.EventCodeActivity"
android:exported="false" />
<activity
android:name=".ui.event.EventActivity"
android:exported="false" />
<activity
android:name=".ui.start.StartActivity"
android:exported="true"
......@@ -59,6 +52,22 @@
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.telephone.TelephoneActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Theme.ScanQR"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.event.EventCodeActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.event.EventActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.email.EmailCodeActivity"
android:exported="false"
......
......@@ -32,6 +32,7 @@ import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.SolarEngineUtils
import com.base.scanqr.utils.SolarEngineUtils.initSolarEngine
import com.base.scanqr.utils.SolarEngineUtils.solarkey
import com.base.scanqr.utils.WriteLogEx.writeLogFile
import com.facebook.FacebookSdk
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.gson.Gson
......@@ -126,15 +127,7 @@ class MyApplication : Application() {
FCMManager.initFirebase(this)
FCMManager.subscribeToTopic(topic)
initConfig()
Thread {
InstallHelps.init {
initRemoteConfig()
}
// val json = Gson().toJson(ConfigBean())
// LogEx.logDebug(TAG, "json=$json")
}.start()
initAppConfig()
SolarEngineManager.getInstance().preInit(this, solarkey)
......@@ -162,6 +155,20 @@ class MyApplication : Application() {
appContext.initSolarEngine(true)
}
private fun initAppConfig() {
Thread {
val config = AppPreferences.getInstance().getString("config", "")
if (config.isNotEmpty()) {
initConfig(config)
}
InstallHelps.init {
initRemoteConfig()
}
}.start()
}
private var lastTimePause = 0L
private var lastTimeResume = 0L
......@@ -232,43 +239,44 @@ class MyApplication : Application() {
private fun initRemoteConfig() {
LogEx.logDebug(TAG, "initRemoteConfig")
NewComUtils.requestCfg { config ->
if (config != null) {
AppPreferences.getInstance().put("config", config)
initConfig(config)
LogEx.logDebug("requestCfg", "config=$config")
} else {
EventUtils.event("configNull")
writeLogFile("config", "configNull")
}
LogEx.logDebug("requestCfg", "config=$config")
initConfig(config)
}
}
private fun initConfig(config: String? = AppPreferences.getInstance().getString("config", "")) {
private fun initConfig(config: String) {
kotlin.runCatching {
val configBean = Gson().fromJson(config, ConfigBean::class.java)
// kotlin.runCatching {
val configBean = Gson().fromJson(config, ConfigBean::class.java)
val jsonObject = JSONObject()
jsonObject.put("ut", configBean.ut)
EventUtils.event("user_type", ext = jsonObject)
LogEx.logDebug("initConfig", "ut=${configBean.ut}")
writeLogFile("config", config)
//配置
ConfigBean.configBean = configBean
val jsonObject = JSONObject()
jsonObject.put("ut", configBean.ut)
EventUtils.event("user_type", ext = jsonObject)
LogEx.logDebug("initConfig", "ut=${configBean.ut}")
//广告
AdConfigBean.adsConfigBean = configBean.adConfigBean
LogEx.logDebug("initConfig", "adsConfigBean=${AdConfigBean.adsConfigBean.timeInterval}")
//配置
ConfigBean.configBean = configBean
//通知
PopupConfigBean.popupConfigBean = configBean.popupConfigBean
LogEx.logDebug("initConfig", "popupConfigBean=${PopupConfigBean.popupConfigBean.popupCount}")
//广告
AdConfigBean.adsConfigBean = configBean.adConfigBean
LogEx.logDebug("initConfig", "adsConfigBean=${AdConfigBean.adsConfigBean.timeInterval}")
//启动定时器
changeTimer()
}
//通知
PopupConfigBean.popupConfigBean = configBean.popupConfigBean
LogEx.logDebug("initConfig", "popupConfigBean=${PopupConfigBean.popupConfigBean.popupCount}")
//启动定时器
changeTimer()
// }
}
......
package com.base.scanqr.bean
data class TelephoneUIBean(
var tel: String = ""
) : ScanBean(FunctionUIBean.KEY_TELEPHONE) {
companion object {
fun isWifiQR(qrCodeValue: String): Boolean {
if (qrCodeValue.startsWith("tel:")) {
return true
}
return false
}
fun createTelephoneBean(qrCodeValue: String): TelephoneUIBean {
val bean = TelephoneUIBean()
val kv = qrCodeValue.split(":")
bean.tel = kv[1]
return bean
}
}
}
\ No newline at end of file
......@@ -31,6 +31,7 @@ object EventUtils {
if (!ifAgreePrivacy) {
return
}
LogEx.logDebug(TAG, "key=$key ext=$ext")
Thread {
var paramJson: String? = ""
......@@ -57,13 +58,15 @@ object EventUtils {
.put("data", s)
.put("bp", s2)
.toString()
LogEx.logDebug(TAG, "uuid=${AppPreferences.getInstance().getString("uuid", "")}")
LogEx.logDebug(TAG, "gid=${AppPreferences.getInstance().getString("gid", "")}")
// LogEx.logDebug(TAG, "key=$key data=$data")
// LogEx.logDebug(TAG, "uuid=${AppPreferences.getInstance().getString("uuid", "")}")
// LogEx.logDebug(TAG, "gid=${AppPreferences.getInstance().getString("gid", "")}")
paramJson = AESHelper.encrypt(data)
} catch (e: JSONException) {
paramJson = ""
}
LogEx.logDebug(TAG, "url=$url")
LogEx.logDebug(TAG, "key=$key url=$url")
doPost(
url,
HashMap(),
......
......@@ -5,6 +5,7 @@ import com.base.scanqr.BuildConfig
import com.base.scanqr.GlobalConfig
import com.base.scanqr.utils.AppPreferences
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.WriteLogEx.writeLogFile
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
......@@ -37,7 +38,9 @@ object NewComUtils {
"&device=${AppPreferences.getInstance().getString("gid", "")}" +
"&aid=${AppPreferences.getInstance().getString("uuid", "")}"
s = if (BuildConfig.DEBUG) "$s&mode=4" else ""
if (BuildConfig.DEBUG) {
s = "$s&mode=2"
}
s
// mode =3 google mode=2 facebook mode=1 自然,mode=4 测试
// &mode=3
......@@ -47,6 +50,7 @@ object NewComUtils {
fun requestCfg(callback: (json: String?) -> Unit) {
CoroutineScope(Dispatchers.IO).launch {
val response = doGet()
writeLogFile("response", response.toString())
if (response == null) {
withContext(Dispatchers.Main) {
callback(null)
......@@ -55,6 +59,7 @@ object NewComUtils {
}
val data = extractData(response)
writeLogFile("extractData", data.toString())
if (data == null) {
withContext(Dispatchers.Main) {
callback(null)
......@@ -76,14 +81,15 @@ object NewComUtils {
val conn: HttpURLConnection = URL(urlPath).openConnection() as HttpURLConnection
conn.setRequestMethod("GET")
conn.connectTimeout = 150000
if (200 == conn.getResponseCode()) {
val code = conn.getResponseCode()
writeLogFile("code", code.toString())
if (200 == code) {
val json = BufferedReader(InputStreamReader(conn.inputStream)).readLine()
LogEx.logDebug(TAG, "json=$json")
writeLogFile("json", json)
return json
}
} catch (e: Exception) {
e.printStackTrace()
Log.d("okhttp", e.toString())
writeLogFile("Exception", e.message.toString())
}
return null
}
......
......@@ -45,9 +45,6 @@ class EventCodeActivity : BaseActivity<ActivityEventCodeBinding>(ActivityEventCo
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
launcher.launch(arrayOf(Manifest.permission.WRITE_CALENDAR)) {}
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_item)
val data = intent.extras?.getString("data")
......
......@@ -10,12 +10,14 @@ import com.base.scanqr.base.BaseFragment
import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EMAIL
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EVENT
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TELEPHONE
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TEXT
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WIFI
import com.base.scanqr.databinding.FragmentCreateBinding
import com.base.scanqr.ui.email.EmailActivity
import com.base.scanqr.ui.event.EventActivity
import com.base.scanqr.ui.telephone.TelephoneActivity
import com.base.scanqr.ui.text.TextActivity
import com.base.scanqr.ui.website.WebsiteActivity
import com.base.scanqr.ui.wifi.WifiActivity
......@@ -42,7 +44,7 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean(KEY_EVENT, R.mipmap.h_event, resources.getString(R.string.event)),
// FunctionUIBean(KEY_CONTACT, R.mipmap.h_contact, resources.getString(R.string.contact)),
// FunctionUIBean(KEY_LOCATION, R.mipmap.h_loction, resources.getString(R.string.location)),
// FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)),
FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)),
// FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)),
)
)
......@@ -88,6 +90,10 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
KEY_EVENT -> {
startActivity(Intent(requireContext(), EventActivity::class.java))
}
KEY_TELEPHONE -> {
startActivity(Intent(requireContext(), TelephoneActivity::class.java))
}
}
}
......
......@@ -23,6 +23,7 @@ import com.base.scanqr.ui.email.EmailActivity
import com.base.scanqr.ui.event.EventActivity
import com.base.scanqr.ui.language.LanguageActivity
import com.base.scanqr.ui.main.MainActivity
import com.base.scanqr.ui.telephone.TelephoneActivity
import com.base.scanqr.ui.text.TextActivity
import com.base.scanqr.ui.website.WebsiteActivity
import com.base.scanqr.ui.wifi.WifiActivity
......@@ -44,7 +45,7 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
override fun initView() {
super.initView()
startActivity(Intent(this, EventActivity::class.java))
startActivity(Intent(this, TelephoneActivity::class.java))
finish()
return
......
package com.base.scanqr.ui.telephone
import android.net.Uri
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.core.widget.addTextChangedListener
import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.ads.AdsShowCallBack
import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.TelephoneUIBean
import com.base.scanqr.databinding.ActivityTelephoneBinding
import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.IntentUtils.intentPickContacts
import com.base.scanqr.utils.ToastUtils.toast
class TelephoneActivity : BaseActivity<ActivityTelephoneBinding>(ActivityTelephoneBinding::inflate) {
private var telephoneBean = TelephoneUIBean()
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
}
override fun initView() {
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_app_exit)
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
AdsMgr.showInsert(this@TelephoneActivity, false, object : AdsShowCallBack() {
override fun close(where: Int) {
finishToMainTop()
}
override fun failed(where: Int) {
finishToMainTop()
}
override fun googleFailed(where: Int) {
finishToMainTop()
}
})
}
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.edit.addTextChangedListener { s ->
telephoneBean.tel = s.toString()
}
binding.tvSelect.setOnClickListener {
val intent = intentPickContacts()
try {
launcher.launch(intent) { result ->
val contactUri: Uri? = result.data?.data
}
} catch (e: Exception) {
toast("No application was found to handle the contacts pick", true)
}
}
}
}
\ No newline at end of file
package com.base.scanqr.utils
import android.annotation.SuppressLint
import android.content.ContentUris
import android.content.Context
import android.net.Uri
import android.provider.ContactsContract
object ContactUtils {
@SuppressLint("Range")
fun Context.queryTel(contactUri: Uri) {
val cursor = contentResolver.query(
contactUri,
null,
null,
null,
null
)
cursor?.use {
if (it.moveToFirst()) {
val phoneId = it.getLong(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID))
val phoneCursor = contentResolver.query(
ContentUris.withAppendedId(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneId),
null,
null,
null,
null
)
phoneCursor?.use {
if (it.moveToFirst()) {
val phoneNumber =
phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
// 使用phoneNumber
}
}
}
}
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.CalendarContract
import android.provider.ContactsContract
import android.provider.Settings
import androidx.core.content.FileProvider
import com.base.scanqr.bean.EmailUIBean
......@@ -113,4 +114,12 @@ object IntentUtils {
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, eventUIBean.location)
return intent
}
fun intentPickContacts(): Intent {
val intent = Intent(Intent.ACTION_PICK)
intent.setType(ContactsContract.Contacts.CONTENT_TYPE)
val chooser = Intent.createChooser(intent, null)
return chooser
}
}
\ No newline at end of file
package com.base.scanqr.utils
import android.os.Environment
import com.base.scanqr.BuildConfig
import com.base.scanqr.MyApplication
import com.base.scanqr.R
import com.base.scanqr.utils.KotlinExt.toFormatTime2
import java.io.File
object WriteLogEx {
private val logoDir by lazy(LazyThreadSafetyMode.NONE) {
val appName = MyApplication.appContext.resources.getString(R.string.app_name)
val log = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "${appName}_logo")
if (!log.exists()) log.mkdirs()
log
}
fun writeLogFile(key: String, log: String) {
if (!BuildConfig.DEBUG) return
val logName = key + "_" + System.currentTimeMillis().toFormatTime2() + ".txt"
val logFile = File(logoDir, logName)
logFile.createNewFile()
logFile.writeText(log, Charsets.UTF_8)
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.website.WebsiteActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/telephone"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/fl_back"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fl_queren"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/queren"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="18dp"
android:text="@string/phone"
android:textColor="#6473F8"
android:textSize="16sp" />
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/bg_f4f4f4_15"
android:hint="@string/enter_phone_number"
android:inputType="textUri"
android:paddingHorizontal="14dp"
android:textColor="@color/black"
android:textColorHint="#999999"
tools:ignore="Autofill" />
<TextView
android:id="@+id/tvSelect"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="18dp"
android:background="@drawable/bg_stroke_6473f8_90"
android:gravity="center"
android:text="@string/select_in_contacts"
android:textColor="#6473F8"
android:textSize="17sp" />
<com.base.scanqr.ads.NativeParentView
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:background="@drawable/bg_ecf6ff_10"
android:minHeight="258dp"
android:paddingTop="20dp"
android:paddingBottom="20dp"
app:layout_constraintBottom_toBottomOf="parent">
<io.supercharge.shimmerlayout.ShimmerLayout
android:id="@+id/shimmerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="16dp"
app:shimmer_angle="25"
app:shimmer_animation_duration="2000"
app:shimmer_auto_start="true"
app:shimmer_color="#33ffffff"
app:shimmer_mask_width="0.2">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/zhanweitu"
tools:ignore="ContentDescription,ImageContrastCheck" />
</io.supercharge.shimmerlayout.ShimmerLayout>
</com.base.scanqr.ads.NativeParentView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -2,8 +2,15 @@
<style name="Theme.DataRecovery" parent="Theme.ScanQR">
<!-- Transparent system bars for edge-to-edge. -->
<!-- <item name="android:navigationBarColor">@android:color/transparent</item>-->
<!-- <item name="android:statusBarColor">@android:color/transparent</item>-->
<!-- <item name="android:windowLightStatusBar">?attr/isLightTheme</item>-->
<!-- <item name="android:navigationBarColor">@android:color/transparent</item>-->
<!-- <item name="android:statusBarColor">@android:color/transparent</item>-->
<!-- <item name="android:windowLightStatusBar">?attr/isLightTheme</item>-->
</style>
<style name="Theme.ScanQR" parent="Base.Theme.ScanQR">
<!-- Transparent system bars for edge-to-edge. -->
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
</style>
</resources>
\ No newline at end of file
......@@ -28,4 +28,5 @@
<dimen name="dp_110">110dp</dimen>
<dimen name="dp_112">112dp</dimen>
<dimen name="dp_114">114dp</dimen>
<dimen name="fab_margin">16dp</dimen>
</resources>
\ No newline at end of file
......@@ -91,5 +91,8 @@
<string name="datetime">DateTime</string>
<string name="clean">Clean</string>
<string name="ok">OK</string>
<string name="phone">Phone</string>
<string name="enter_phone_number">Enter phone number</string>
<string name="select_in_contacts">Select in contacts</string>
</resources>
\ No newline at end of file
File added
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment