Page 7 Stage 3
This commit is contained in:
parent
4d35371e4a
commit
71c168488b
29 changed files with 906 additions and 404 deletions
|
@ -12,8 +12,8 @@ android {
|
|||
applicationId = "uk.kagurach.android101"
|
||||
minSdk = 28
|
||||
targetSdk = 34
|
||||
versionCode = 172
|
||||
versionName = "1.7.2"
|
||||
versionCode = 173
|
||||
versionName = "1.7.3"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ android {
|
|||
androidResources {
|
||||
generateLocaleConfig = true
|
||||
}
|
||||
buildFeatures{
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
}
|
||||
}
|
||||
|
@ -75,6 +75,10 @@ dependencies {
|
|||
implementation(libs.androidx.datastore.rxjava3)
|
||||
implementation(libs.androidx.datastore.preferences)
|
||||
implementation(libs.androidx.work)
|
||||
implementation(libs.androidx.camera.core)
|
||||
implementation(libs.androidx.camera.view)
|
||||
implementation(libs.androidx.camera.lifecycle)
|
||||
implementation(libs.androidx.camera.camera2)
|
||||
|
||||
testImplementation(libs.junit)
|
||||
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
package uk.kagurach.android101
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
|
|
|
@ -3,27 +3,27 @@ package uk.kagurach.android101
|
|||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import uk.kagurach.android101.helper.ColorHelper
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
|
||||
class TestColorHelper {
|
||||
val colorHelper = ColorHelper()
|
||||
|
||||
@Test
|
||||
fun Test_toColorInt(){
|
||||
Assert.assertEquals(0,colorHelper.toColorInt(0, 0, 0))
|
||||
Assert.assertEquals(0xfffffe,colorHelper.toColorInt(255, 0xff, 254))
|
||||
fun Test_toColorInt() {
|
||||
Assert.assertEquals(0, colorHelper.toColorInt(0, 0, 0))
|
||||
Assert.assertEquals(0xfffffe, colorHelper.toColorInt(255, 0xff, 254))
|
||||
}
|
||||
|
||||
@Test(expected = Exception::class)
|
||||
fun Test_error(){
|
||||
val wtf1 = colorHelper.toColorInt(-1,256,1)
|
||||
fun Test_error() {
|
||||
val wtf1 = colorHelper.toColorInt(-1, 256, 1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun Test_toString(){
|
||||
Assert.assertEquals("$000000",colorHelper.toString(0,"$"))
|
||||
Assert.assertEquals("#ffffff",colorHelper.toString(0xffffff))
|
||||
Assert.assertEquals("#ABCD12",colorHelper.toString(0xabcd12, upperCase = true))
|
||||
fun Test_toString() {
|
||||
Assert.assertEquals("$000000", colorHelper.toString(0, "$"))
|
||||
Assert.assertEquals("#ffffff", colorHelper.toString(0xffffff))
|
||||
Assert.assertEquals("#ABCD12", colorHelper.toString(0xabcd12, upperCase = true))
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,14 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
|
@ -18,8 +25,10 @@
|
|||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="false"
|
||||
android:theme="@style/Theme.Android101"
|
||||
android:usesCleartextTraffic="true"
|
||||
>
|
||||
android:usesCleartextTraffic="true">
|
||||
<activity
|
||||
android:name=".additionalActivity.CameraXActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".Page7"
|
||||
android:exported="false"
|
||||
|
|
|
@ -70,6 +70,16 @@ public class MainActivity extends KaBaseActivity {
|
|||
new String[]{Manifest.permission.READ_MEDIA_AUDIO},
|
||||
102);
|
||||
}
|
||||
if (ContextCompat
|
||||
.checkSelfPermission
|
||||
(MainActivity.this, Manifest.permission.CAMERA)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
textViewAppendString(tv, "Acquiring CAMERA");
|
||||
ActivityCompat.requestPermissions
|
||||
(MainActivity.this,
|
||||
new String[]{Manifest.permission.CAMERA},
|
||||
102);
|
||||
}
|
||||
textViewAppendString(tv, "Check Finished");
|
||||
textViewAppendString(tv, "提示:常按有惊喜");
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.util.Log
|
|||
import android.view.View
|
||||
import android.view.View.GONE
|
||||
import android.view.View.OnClickListener
|
||||
import android.view.View.OnLongClickListener
|
||||
import android.view.View.VISIBLE
|
||||
import android.widget.Button
|
||||
import android.widget.EditText
|
||||
|
@ -32,14 +33,14 @@ import kotlinx.coroutines.flow.map
|
|||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.Call
|
||||
import okhttp3.Callback
|
||||
import okhttp3.MediaType
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.MultipartBody
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody
|
||||
import okhttp3.RequestBody.Companion.asRequestBody
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import uk.kagurach.android101.additionalActivity.CameraXActivity
|
||||
import uk.kagurach.android101.helper.ToastHelper
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
@ -77,6 +78,9 @@ class Page7 : KaBaseActivity() {
|
|||
findViewById<Button>(R.id.P7ListenAudio).setOnClickListener(RecordButtonHandler())
|
||||
findViewById<Button>(R.id.P7RecordAudio).setOnClickListener(RecordButtonHandler())
|
||||
findViewById<Button>(R.id.P7SendAudio).setOnClickListener(ButtonHandler(this))
|
||||
|
||||
findViewById<Button>(R.id.P7ShotPhoto).setOnClickListener(PhotoButtonHandler(this))
|
||||
findViewById<Button>(R.id.P7SendPhoto).setOnClickListener(ButtonHandler(this))
|
||||
}
|
||||
|
||||
inner class ButtonHandler(val activity: Activity) : OnClickListener {
|
||||
|
@ -90,6 +94,7 @@ class Page7 : KaBaseActivity() {
|
|||
// Validate
|
||||
if (botAPI.isBlank() || (chatID.isBlank() && v.id != R.id.P7SaveAndSetAPI)) {
|
||||
ToastHelper.ShowToast(getText(R.string.require_api).toString(), baseContext)
|
||||
return
|
||||
}
|
||||
|
||||
when (v.id) {
|
||||
|
@ -109,8 +114,22 @@ class Page7 : KaBaseActivity() {
|
|||
}
|
||||
|
||||
R.id.P7SendMessageButton -> { // 发送文本
|
||||
tgHandler.postText(
|
||||
val text =
|
||||
activity.findViewById<EditText>(R.id.P7SendMessageText).text.toString()
|
||||
if (text.isEmpty()) {
|
||||
return
|
||||
}
|
||||
tgHandler.postText(text) { result ->
|
||||
runOnUiThread {
|
||||
resultTextField.text = result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
R.id.P7SendAudio -> { // 发送音频
|
||||
tgHandler.postAudio(
|
||||
audioUri,
|
||||
baseContext,
|
||||
) { result ->
|
||||
runOnUiThread {
|
||||
resultTextField.text = result
|
||||
|
@ -118,15 +137,13 @@ class Page7 : KaBaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
R.id.P7SendAudio ->{ // 发送音频
|
||||
tgHandler.postAudio(
|
||||
audioUri,
|
||||
baseContext,
|
||||
){result ->
|
||||
R.id.P7SendPhoto -> { // 发送照片
|
||||
tgHandler.postImage(photoPath) { result ->
|
||||
runOnUiThread {
|
||||
resultTextField.text = result
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else -> resultTextField.text = "?"
|
||||
|
@ -157,13 +174,13 @@ class Page7 : KaBaseActivity() {
|
|||
val recordIntent = Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION)
|
||||
try {
|
||||
startActivityForResult(recordIntent, 0)
|
||||
} catch (e : android.content.ActivityNotFoundException){
|
||||
Log.e("Recorder@Android101",e.printStackTrace().toString())
|
||||
} catch (e: android.content.ActivityNotFoundException) {
|
||||
Log.e("Recorder@Android101", e.printStackTrace().toString())
|
||||
}
|
||||
}
|
||||
|
||||
R.id.P7ListenAudio -> {
|
||||
if (audioUri!=Uri.EMPTY){
|
||||
if (audioUri != Uri.EMPTY) {
|
||||
val mMediaPlayer = MediaPlayer()
|
||||
mMediaPlayer.reset()
|
||||
mMediaPlayer.setAudioAttributes(
|
||||
|
@ -171,13 +188,24 @@ class Page7 : KaBaseActivity() {
|
|||
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
|
||||
.build()
|
||||
)
|
||||
mMediaPlayer.setDataSource(baseContext,audioUri)
|
||||
mMediaPlayer.setDataSource(baseContext, audioUri)
|
||||
mMediaPlayer.prepare()
|
||||
mMediaPlayer.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inner class PhotoButtonHandler(val context: Context) : OnClickListener, OnLongClickListener {
|
||||
override fun onClick(v: View) {
|
||||
val myIntent = Intent(context, CameraXActivity::class.java)
|
||||
startActivityForResult(myIntent, 1)
|
||||
}
|
||||
|
||||
override fun onLongClick(v: View): Boolean {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -185,17 +213,26 @@ class Page7 : KaBaseActivity() {
|
|||
super.onActivityResult(requestCode, resultCode, data)
|
||||
when (requestCode) {
|
||||
0 -> { // 录音
|
||||
if (resultCode == RESULT_OK && data != null){
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
audioUri = data.data
|
||||
ToastHelper.ShowToast("Saved at ${audioUri}",this)
|
||||
ToastHelper.ShowToast("Saved at ${audioUri}", this)
|
||||
findViewById<Button>(R.id.P7ListenAudio).isEnabled = true
|
||||
}
|
||||
}
|
||||
|
||||
1 -> { // 拍照
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
photoPath = data.getStringExtra("result") ?: return
|
||||
ToastHelper.ShowToast("Saved at ${photoPath}", this)
|
||||
findViewById<Button>(R.id.P7ViewPhoto).isEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
var audioUri = Uri.EMPTY
|
||||
var photoPath = ""
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,23 +282,29 @@ class telegramHandler(val BOT_KEY: String, val CHATID: String) {
|
|||
})
|
||||
}
|
||||
|
||||
fun postAudio(audioUri: Uri,context: Context,callBack: (String) -> Unit) {
|
||||
if (audioUri == Uri.EMPTY){
|
||||
fun postAudio(audioUri: Uri, context: Context, callBack: (String) -> Unit) {
|
||||
if (audioUri == Uri.EMPTY) {
|
||||
callBack("Sorry Please Record First")
|
||||
return
|
||||
}
|
||||
// Copy to local
|
||||
val inputStream: InputStream = context.contentResolver.openInputStream(audioUri)?:return
|
||||
val inputStream: InputStream = context.contentResolver.openInputStream(audioUri) ?: return
|
||||
val bytes = inputStream.readBytes()
|
||||
val file = File(context.cacheDir.path + "/source.m4a")
|
||||
file.writeBytes(bytes)
|
||||
|
||||
|
||||
// Convert to ogg
|
||||
val session = FFmpegKit.execute("-i ${context.cacheDir.path}/source.m4a -acodec libvorbis -aq 4 -vn -ac 2 -map_metadata 0 -y -f ogg ${context.cacheDir.path}/decoded.ogg")
|
||||
val session =
|
||||
FFmpegKit.execute("-i ${context.cacheDir.path}/source.m4a -acodec libvorbis -aq 4 -vn -ac 2 -map_metadata 0 -y -f ogg ${context.cacheDir.path}/decoded.ogg")
|
||||
if (!ReturnCode.isSuccess(session.getReturnCode())) {
|
||||
// FAILURE
|
||||
Log.d("FFmpeg@Android101", String.format("Command failed with state %s and rc %s.%s",
|
||||
session.getState(), session.getReturnCode(), session.getFailStackTrace()))
|
||||
Log.d(
|
||||
"FFmpeg@Android101", String.format(
|
||||
"Command failed with state %s and rc %s.%s",
|
||||
session.getState(), session.getReturnCode(), session.getFailStackTrace()
|
||||
)
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -269,13 +312,14 @@ class telegramHandler(val BOT_KEY: String, val CHATID: String) {
|
|||
val finalUri = "${basicUri}/${api}?chat_id=${CHATID}&voice=attach%3A%2F%2Fvoice"
|
||||
val requestBody = MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
.addFormDataPart("voice","decoded.ogg",
|
||||
RequestBody.create("audio/ogg".toMediaTypeOrNull(),File("${context.cacheDir.path}/decoded.ogg"))
|
||||
)
|
||||
.addFormDataPart(
|
||||
"voice", "decoded.ogg",
|
||||
File("${context.cacheDir.path}/decoded.ogg").asRequestBody("audio/ogg".toMediaTypeOrNull())
|
||||
)
|
||||
.build()
|
||||
val request = Request.Builder()
|
||||
.url(finalUri)
|
||||
.header("Content-Type","multipart/form-data")
|
||||
.header("Content-Type", "multipart/form-data")
|
||||
.post(requestBody)
|
||||
.build()
|
||||
val call = client.newCall(request)
|
||||
|
@ -291,10 +335,44 @@ class telegramHandler(val BOT_KEY: String, val CHATID: String) {
|
|||
callBack("${responseCode},${responseBody}")
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun postImage(photoPath: String, callBack: (String) -> Unit) {
|
||||
if (!File(photoPath).exists()) {
|
||||
callBack("Sorry Please Take Some Photos First")
|
||||
return
|
||||
}
|
||||
|
||||
val api = "sendPhoto"
|
||||
val finalUri = "${basicUri}/${api}?chat_id=${CHATID}&photo=attach%3A%2F%2Fphoto"
|
||||
val requestBody = MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
.addFormDataPart(
|
||||
"photo", photoPath.split('/').last().split('.').first(),
|
||||
File(photoPath).asRequestBody("image/jpeg".toMediaTypeOrNull())
|
||||
)
|
||||
.build()
|
||||
val request = Request.Builder()
|
||||
.url(finalUri)
|
||||
.header("Content-Type", "multipart/form-data")
|
||||
.post(requestBody)
|
||||
.build()
|
||||
val call = client.newCall(request)
|
||||
call.enqueue(object : Callback {
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
Log.e("TgHelper", e.printStackTrace().toString())
|
||||
callBack("${e.printStackTrace()}")
|
||||
}
|
||||
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
val responseCode = response.code
|
||||
val responseBody = response.body?.string()
|
||||
callBack("${responseCode},${responseBody}")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class TGStorage(val context: Context) {
|
||||
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
package uk.kagurach.android101.additionalActivity
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.BitmapFactory
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.View.INVISIBLE
|
||||
import android.view.View.OnClickListener
|
||||
import android.view.View.VISIBLE
|
||||
import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import uk.kagurach.android101.KaBaseActivity
|
||||
import uk.kagurach.android101.R
|
||||
import uk.kagurach.android101.customLayout.CameraXView
|
||||
|
||||
|
||||
class CameraXActivity : KaBaseActivity() {
|
||||
lateinit var cameraXView: CameraXView
|
||||
lateinit var mHandler: Handler
|
||||
var savedImage = ""
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContentView(R.layout.activity_camera_xactivity)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
cameraXView = findViewById(R.id.globalCameraXView)
|
||||
mHandler = Handler(Looper.getMainLooper())
|
||||
|
||||
findViewById<Button>(R.id.CameraXTakePhoto).setOnClickListener(ButtonHandler())
|
||||
findViewById<Button>(R.id.CameraXDenyPhoto).setOnClickListener(ButtonHandler())
|
||||
findViewById<Button>(R.id.CameraXUsePhoto).setOnClickListener(ButtonHandler())
|
||||
|
||||
initCamera()
|
||||
}
|
||||
|
||||
fun initCamera() {
|
||||
cameraXView.openCamera(this) { result ->
|
||||
if (result.isBlank()) {
|
||||
Log.e("initCamera@Android101", "Blank result!")
|
||||
} else {
|
||||
savedImage = result
|
||||
val imageResult = findViewById<ImageView>(R.id.CameraXResult)
|
||||
runOnUiThread {
|
||||
imageResult.visibility = VISIBLE
|
||||
imageResult.setImageBitmap(BitmapFactory.decodeFile(savedImage))
|
||||
|
||||
findViewById<Button>(R.id.CameraXUsePhoto).isEnabled = true
|
||||
findViewById<Button>(R.id.CameraXDenyPhoto).isEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inner class ButtonHandler : OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
when (v.id) {
|
||||
R.id.CameraXTakePhoto -> {
|
||||
findViewById<Button>(R.id.CameraXTakePhoto).isEnabled = false
|
||||
cameraXView.takePicture()
|
||||
}
|
||||
|
||||
R.id.CameraXDenyPhoto -> {
|
||||
runOnUiThread {
|
||||
findViewById<Button>(R.id.CameraXUsePhoto).isEnabled = false
|
||||
findViewById<Button>(R.id.CameraXDenyPhoto).isEnabled = false
|
||||
findViewById<Button>(R.id.CameraXTakePhoto).isEnabled = true
|
||||
findViewById<ImageView>(R.id.CameraXResult).visibility = INVISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
R.id.CameraXUsePhoto -> {
|
||||
val returnIntent = Intent()
|
||||
returnIntent.putExtra("result", savedImage)
|
||||
setResult(RESULT_OK, returnIntent)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
package uk.kagurach.android101.customLayout
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.view.Surface.ROTATION_0
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.camera.core.AspectRatio
|
||||
import androidx.camera.core.CameraSelector
|
||||
import androidx.camera.core.ImageCapture
|
||||
import androidx.camera.core.ImageCaptureException
|
||||
import androidx.camera.core.Preview
|
||||
import androidx.camera.lifecycle.ProcessCameraProvider
|
||||
import androidx.camera.view.PreviewView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import java.io.File
|
||||
import java.util.concurrent.ExecutorService
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class CameraXView : RelativeLayout {
|
||||
var mContext: Context
|
||||
|
||||
lateinit var mCameraPreview: PreviewView
|
||||
lateinit var mExecutorService: ExecutorService
|
||||
lateinit var mMediaDir: String
|
||||
lateinit var mHandler: Handler
|
||||
lateinit var mCameraType: CameraSelector
|
||||
lateinit var mCameraSelector: CameraSelector
|
||||
lateinit var mPreview: Preview
|
||||
lateinit var mCameraProvider: ProcessCameraProvider
|
||||
lateinit var mImageCapture: ImageCapture
|
||||
lateinit var mOwner: LifecycleOwner
|
||||
|
||||
var mOnStop: (String) -> Unit = {}
|
||||
|
||||
private fun init() {
|
||||
mCameraPreview = PreviewView(mContext)
|
||||
mExecutorService = Executors.newSingleThreadExecutor()
|
||||
mMediaDir = mContext.cacheDir.path
|
||||
mHandler = Handler(Looper.getMainLooper()) // 声明一个处理器对象
|
||||
mCameraType = CameraSelector.DEFAULT_BACK_CAMERA
|
||||
mCameraPreview.layoutParams = ViewGroup.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT
|
||||
)
|
||||
addView(mCameraPreview)
|
||||
}
|
||||
|
||||
constructor(context: Context) : super(context) {
|
||||
mContext = context
|
||||
init()
|
||||
}
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
|
||||
mContext = context
|
||||
init()
|
||||
}
|
||||
|
||||
fun openCamera(owner: LifecycleOwner, onStopListener: (String) -> Unit) {
|
||||
mOwner = owner
|
||||
mOnStop = onStopListener
|
||||
mHandler.post { initCamera() }
|
||||
}
|
||||
|
||||
private fun initCamera() {
|
||||
val future = ProcessCameraProvider.getInstance(mContext)
|
||||
future.addListener(
|
||||
{
|
||||
try {
|
||||
mCameraProvider = future.get()
|
||||
resetCamera()
|
||||
} catch (e: Exception) {
|
||||
Log.e("Kamera@Android101", e.printStackTrace().toString())
|
||||
}
|
||||
},
|
||||
ContextCompat.getMainExecutor(mContext)
|
||||
)
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
private fun resetCamera() {
|
||||
mCameraSelector = CameraSelector.Builder()
|
||||
.requireLensFacing(mCameraType.lensFacing ?: CameraSelector.LENS_FACING_BACK)
|
||||
.build()
|
||||
mPreview = Preview.Builder()
|
||||
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
|
||||
.build()
|
||||
mImageCapture = ImageCapture.Builder()
|
||||
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
|
||||
.setTargetRotation(ROTATION_0)
|
||||
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
|
||||
.setFlashMode(ImageCapture.FLASH_MODE_OFF)
|
||||
.build()
|
||||
bindCamera(0)
|
||||
mPreview.setSurfaceProvider(mCameraPreview.surfaceProvider)
|
||||
}
|
||||
|
||||
fun bindCamera(mode: Int) {
|
||||
when (mode) {
|
||||
0 -> { // 拍照
|
||||
try {
|
||||
mCameraProvider.unbindAll()
|
||||
mCameraProvider.bindToLifecycle(
|
||||
mOwner, mCameraSelector, mPreview, mImageCapture
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.e("Kamera.bindCamera@Android101", e.printStackTrace().toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun takePicture() {
|
||||
val metaData = ImageCapture.Metadata()
|
||||
val options = ImageCapture.OutputFileOptions.Builder(
|
||||
File("${mMediaDir}/${System.currentTimeMillis()}.jpg")
|
||||
).setMetadata(metaData)
|
||||
.build()
|
||||
mImageCapture.takePicture(options, mExecutorService, object :
|
||||
ImageCapture.OnImageSavedCallback {
|
||||
override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
|
||||
mOnStop.invoke(outputFileResults.savedUri?.path.toString())
|
||||
}
|
||||
|
||||
override fun onError(exception: ImageCaptureException) {
|
||||
Log.e("takePicture@Android101", exception.printStackTrace().toString())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun closeCamera() {
|
||||
mCameraProvider.unbindAll()
|
||||
mExecutorService.shutdown()
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:pathData="m256,760 l-56,-56 224,-224 -224,-224 56,-56 224,224 224,-224 56,56 -224,224 224,224 -56,56 -224,-224 -224,224Z"
|
||||
android:fillColor="#5f6368"/>
|
||||
<path
|
||||
android:fillColor="#5f6368"
|
||||
android:pathData="m256,760 l-56,-56 224,-224 -224,-224 56,-56 224,224 224,-224 56,56 -224,224 224,224 -56,56 -224,-224 -224,224Z" />
|
||||
</vector>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M160,560v-80h280v80L160,560ZM160,400v-80h440v80L160,400ZM160,240v-80h440v80L160,240ZM520,800v-123l221,-220q9,-9 20,-13t22,-4q12,0 23,4.5t20,13.5l37,37q8,9 12.5,20t4.5,22q0,11 -4,22.5T863,580L643,800L520,800ZM820,537 L783,500 820,537ZM580,740h38l121,-122 -18,-19 -19,-18 -122,121v38ZM721,599 L702,581 739,618 721,599Z"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M160,560v-80h280v80L160,560ZM160,400v-80h440v80L160,400ZM160,240v-80h440v80L160,240ZM520,800v-123l221,-220q9,-9 20,-13t22,-4q12,0 23,4.5t20,13.5l37,37q8,9 12.5,20t4.5,22q0,11 -4,22.5T863,580L643,800L520,800ZM820,537 L783,500 820,537ZM580,740h38l121,-122 -18,-19 -19,-18 -122,121v38ZM721,599 L702,581 739,618 721,599Z" />
|
||||
</vector>
|
||||
|
|
|
@ -2,9 +2,12 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#E8EAF6" />
|
||||
<corners android:radius="20dp" />
|
||||
<padding android:left="20dp"
|
||||
android:top="20dp"
|
||||
<padding
|
||||
android:bottom="20dp"
|
||||
android:left="20dp"
|
||||
android:right="20dp"
|
||||
android:bottom="20dp"/>
|
||||
<stroke android:color="#6A000000" android:width="3dp"/>
|
||||
android:top="20dp" />
|
||||
<stroke
|
||||
android:width="3dp"
|
||||
android:color="#6A000000" />
|
||||
</shape>
|
|
@ -2,8 +2,9 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#B3E5FC" />
|
||||
<corners android:radius="16dp" />
|
||||
<padding android:left="16dp"
|
||||
android:top="16dp"
|
||||
<padding
|
||||
android:bottom="16dp"
|
||||
android:left="16dp"
|
||||
android:right="16dp"
|
||||
android:bottom="16dp"/>
|
||||
android:top="16dp" />
|
||||
</shape>
|
|
@ -2,9 +2,12 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#FFFDE7" />
|
||||
<corners android:radius="20dp" />
|
||||
<padding android:left="20dp"
|
||||
android:top="20dp"
|
||||
<padding
|
||||
android:bottom="20dp"
|
||||
android:left="20dp"
|
||||
android:right="20dp"
|
||||
android:bottom="20dp"/>
|
||||
<stroke android:color="#FFEB3B" android:width="3dp"/>
|
||||
android:top="20dp" />
|
||||
<stroke
|
||||
android:width="3dp"
|
||||
android:color="#FFEB3B" />
|
||||
</shape>
|
65
app/src/main/res/layout/activity_camera_xactivity.xml
Normal file
65
app/src/main/res/layout/activity_camera_xactivity.xml
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?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=".additionalActivity.CameraXActivity">
|
||||
|
||||
<uk.kagurach.android101.customLayout.CameraXView
|
||||
android:id="@+id/globalCameraXView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="100dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/CameraXResult"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="100dp"
|
||||
android:rotation="90"
|
||||
android:visibility="invisible" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintTop_toBottomOf="@id/globalCameraXView">
|
||||
|
||||
<Button
|
||||
android:id="@+id/CameraXDenyPhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:enabled="false"
|
||||
android:text="@string/retake"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/CameraXTakePhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorPrimary"
|
||||
android:text="@string/shot"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/CameraXUsePhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:enabled="false"
|
||||
android:text="@string/use"
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -10,16 +10,15 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="10dp"
|
||||
>
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="6"
|
||||
>
|
||||
android:layout_weight="6">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_hello"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -38,10 +37,9 @@
|
|||
android:id="@+id/P1OpenAppSettingsLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:text="@string/settings"
|
||||
/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -49,13 +47,12 @@
|
|||
android:id="@+id/Page1NextPage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginVertical="10dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="10dp"
|
||||
android:layout_weight="1.5"
|
||||
android:text="@string/next_page"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:enabled="false"
|
||||
android:backgroundTint="?colorSecondary" />
|
||||
|
||||
android:text="@string/next_page" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -7,24 +7,25 @@
|
|||
android:layout_height="match_parent"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
tools:context=".MainActivity2"
|
||||
tools:viewBindingIgnore="true"
|
||||
>
|
||||
tools:viewBindingIgnore="true">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="300dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/test2strview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/test_str"
|
||||
android:textColor="#000000"
|
||||
android:textSize="70sp"/>
|
||||
android:textSize="70sp" />
|
||||
</ScrollView>
|
||||
|
||||
<TextView
|
||||
|
@ -32,8 +33,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:textSize="20sp"
|
||||
android:text="@string/p2_default_setting"/>
|
||||
android:text="@string/p2_default_setting"
|
||||
android:textSize="20sp" />
|
||||
|
||||
|
||||
<LinearLayout
|
||||
|
@ -41,44 +42,42 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:minHeight="140dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/Page2SetTestText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="text"
|
||||
android:text="@string/test_str"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:hint="@string/test_str"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="text"
|
||||
android:text="@string/test_str" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
android:orientation="vertical">
|
||||
|
||||
<Button
|
||||
android:id="@+id/Page2SetTestTextButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/setText"
|
||||
android:onClick="setText"
|
||||
android:backgroundTint="@color/tfb"
|
||||
/>
|
||||
<Button
|
||||
android:id="@+id/Page2SetTestTextButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:onClick="setText"
|
||||
android:text="@string/setText" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P2OpenSettingsButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings"
|
||||
android:backgroundTint="@color/tfp"
|
||||
/>
|
||||
<Button
|
||||
android:id="@+id/P2OpenSettingsButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfp"
|
||||
android:text="@string/settings" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
@ -87,39 +86,40 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
>
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/font_size"
|
||||
android:textSize="18sp"
|
||||
android:layout_marginTop="5dp"/>
|
||||
android:textAllCaps="false"
|
||||
android:textSize="18sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/Page2SetSP"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:onClick="setUnit_sp"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorPrimary"
|
||||
android:onClick="setUnit_sp"
|
||||
android:text="70sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/Page2SetDP"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:onClick="setUnit_dp"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:onClick="setUnit_dp"
|
||||
android:text="70dp" />
|
||||
|
||||
<Button
|
||||
|
@ -127,20 +127,20 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:onClick="setUnit_px"
|
||||
android:text="70px"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
tools:ignore="PxUsage" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/next_page_nav_2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:text="@string/two_way_page"
|
||||
/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/two_way_page" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
@ -150,28 +150,29 @@
|
|||
android:id="@+id/P2SettingPage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:background="@drawable/p2_settings_layout"
|
||||
android:visibility="invisible">
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="55dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/settings"
|
||||
android:layout_weight="1"
|
||||
android:textSize="35sp"
|
||||
android:text="@string/settings"
|
||||
android:textColor="#B71C1C"
|
||||
/>
|
||||
android:textSize="35sp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/P2SettingsCloseButton"
|
||||
|
@ -189,55 +190,56 @@
|
|||
android:layout_marginHorizontal="8dp"
|
||||
android:layout_marginVertical="5dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="30sp"
|
||||
android:text="@string/set_color"/>
|
||||
android:text="@string/set_color"
|
||||
android:textSize="30sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="20dp"
|
||||
>
|
||||
android:paddingTop="20dp">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/P2SetColorR"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:hint="@string/rgb_r_range"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/P2SetColorG"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:hint="@string/rgb_g_range"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/P2SetColorB"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:hint="@string/rgb_b_range"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginStart="10dp">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/P2ColorShower"
|
||||
|
@ -251,23 +253,23 @@
|
|||
android:id="@+id/P2TestColorButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/test_color"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorPrimary"
|
||||
android:textAllCaps="false"/>
|
||||
android:text="@string/test_color"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/Page2SetColor"
|
||||
android:layout_width="0dp"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/set_color"
|
||||
android:textAllCaps="false"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:onClick="setColor"/>
|
||||
android:onClick="setColor"
|
||||
android:text="@string/set_color"
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -277,37 +279,38 @@
|
|||
android:layout_marginHorizontal="8dp"
|
||||
android:layout_marginTop="15dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="30sp"
|
||||
android:text="@string/set_per_unit_font_size"/>
|
||||
android:text="@string/set_per_unit_font_size"
|
||||
android:textSize="30sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
>
|
||||
android:orientation="horizontal">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/P2SetTextSize"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:ems="10"
|
||||
android:layout_weight="1"
|
||||
android:inputType="number"
|
||||
android:ems="10"
|
||||
android:hint="设置字体大小"
|
||||
/>
|
||||
android:inputType="number" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/Page2SetSize"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="30dp"
|
||||
android:onClick="setSize"
|
||||
android:textAllCaps="false"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/set" />
|
||||
android:onClick="setSize"
|
||||
android:text="@string/set"
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -316,5 +319,4 @@
|
|||
</FrameLayout>
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -6,185 +6,214 @@
|
|||
android:layout_height="match_parent"
|
||||
tools:context=".Page3"
|
||||
tools:viewBindingIgnore="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P3CalcName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:text="@string/kaculate"
|
||||
android:textSize="40sp"/>
|
||||
android:textSize="40sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P3CalcResult"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="400dp"
|
||||
android:textSize="25sp"
|
||||
android:text="" />
|
||||
android:text=""
|
||||
android:textSize="25sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3CE"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="CE" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3Div"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="/" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3X"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="x" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3Nextpage"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/next_page" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_7"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="7" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_8"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="8" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_9"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="9" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3Plus"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="+" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_4"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="4" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_5"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="5" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_6"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="6" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3Minus"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="-" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_1"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="1" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_2"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="2" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_3"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="3" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3ChengFang"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="^" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3BK"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/Backspace" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3_0"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="@color/tfb"
|
||||
android:text="0" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3Dot"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="." />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P3EqualButton"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="=" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
@ -12,88 +12,88 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="10dp"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="40sp"
|
||||
android:text="@string/user"/>
|
||||
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="35sp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:id="@+id/P4Ask"
|
||||
android:importantForAutofill="no"
|
||||
android:text="@string/AI_ASK_DEFAULT_STRING"
|
||||
android:textColor="@color/tfp"
|
||||
android:hint="@string/AI_ASK_DEFAULT_STRING"
|
||||
android:inputType="text" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="40sp"
|
||||
android:text="@string/ai"/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="8"
|
||||
android:layout_marginStart="10dp">
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:textSize="35sp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/P4Result"
|
||||
android:textColor="@color/tfb"
|
||||
/>
|
||||
</ScrollView>
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:id="@+id/P4AIRuntime"
|
||||
android:text="@string/ai_ready"/>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="3"
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:orientation="horizontal">
|
||||
android:text="@string/user"
|
||||
android:textSize="40sp" />
|
||||
|
||||
<Button
|
||||
android:layout_width="140dp"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/P4AskAI"
|
||||
android:text="@string/ask_ai"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:layout_width="120dp"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/P4Vibrate"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/vibrate"
|
||||
/>
|
||||
|
||||
<Button
|
||||
<EditText
|
||||
android:id="@+id/P4Ask"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/P4PageButton"
|
||||
android:text="@string/next_page"
|
||||
/>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:hint="@string/AI_ASK_DEFAULT_STRING"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="text"
|
||||
android:text="@string/AI_ASK_DEFAULT_STRING"
|
||||
android:textColor="@color/tfp"
|
||||
android:textSize="35sp" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/ai"
|
||||
android:textSize="40sp" />
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_weight="8">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P4Result"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/tfb"
|
||||
android:textSize="35sp" />
|
||||
</ScrollView>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P4AIRuntime"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/ai_ready"
|
||||
android:textSize="25sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:layout_weight="3"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P4AskAI"
|
||||
android:layout_width="140dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:text="@string/ask_ai" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P4Vibrate"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/vibrate" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P4PageButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:text="@string/next_page" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -10,8 +10,8 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -19,96 +19,106 @@
|
|||
android:layout_marginTop="15dp"
|
||||
android:background="#E0F7FA"
|
||||
android:text="@string/animal_manage_system"
|
||||
android:textSize="30sp"
|
||||
/>
|
||||
android:textSize="30sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:textSize="28sp"
|
||||
android:text="@string/name"/>
|
||||
android:text="@string/name"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<EditText
|
||||
android:layout_marginStart="10dp"
|
||||
android:id="@+id/P5AnimalNameInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
android:hint="@string/animal_name_default"
|
||||
android:maxLines="1"
|
||||
android:inputType="text"
|
||||
android:id="@+id/P5AnimalNameInput"/>
|
||||
android:maxLines="1" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="280dp"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:layout_marginHorizontal="10dp">
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:textSize="28sp"
|
||||
android:text="@string/type"/>
|
||||
<AutoCompleteTextView
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:hint="@string/cat"
|
||||
android:maxLines="1"
|
||||
android:inputType="text"
|
||||
android:id="@+id/AnimalTypeAutoCompleteInput"/>
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/type"
|
||||
android:textSize="28sp" />
|
||||
|
||||
<AutoCompleteTextView
|
||||
android:id="@+id/AnimalTypeAutoCompleteInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
android:hint="@string/cat"
|
||||
android:inputType="text"
|
||||
android:maxLines="1" />
|
||||
</LinearLayout>
|
||||
|
||||
<ListView
|
||||
android:id="@+id/P5Suggestions"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:layout_marginStart="65dp"
|
||||
android:layout_marginEnd="5dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_height="200dp" />
|
||||
android:layout_marginEnd="5dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/P5AddAnimalButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:text="@string/add"
|
||||
android:backgroundTint="#4FC3F7"/>
|
||||
android:layout_marginVertical="20dp"
|
||||
android:backgroundTint="#4FC3F7"
|
||||
android:text="@string/add" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P5CleanDataButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/clean_data"/>
|
||||
android:text="@string/clean_data" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P5QueryButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:text="@string/query"/>
|
||||
android:text="@string/query" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P5NextPage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="#0091EA"
|
||||
android:text="@string/next_page"/>
|
||||
android:text="@string/next_page" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
@ -118,38 +128,38 @@
|
|||
android:id="@+id/P5Flyout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginVertical="50dp"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginVertical="50dp"
|
||||
android:background="@drawable/p5_flyout_layout"
|
||||
android:visibility="gone">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
>
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P5QueryResult"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="monospace"
|
||||
android:textSize="25sp"
|
||||
/>
|
||||
android:textSize="25sp" />
|
||||
</ScrollView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/P5CloseQueryButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="30dp"
|
||||
android:layout_marginVertical="10dp"
|
||||
android:backgroundTint="#FFF59D"
|
||||
android:text="@string/close"
|
||||
android:layout_marginVertical="10dp"
|
||||
android:layout_marginHorizontal="30dp"
|
||||
android:textColor="@color/black"
|
||||
/>
|
||||
android:textColor="@color/black" />
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?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=".Page6">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
@ -18,13 +18,13 @@
|
|||
android:layout_marginTop="50dp"
|
||||
android:minHeight="30dp"
|
||||
android:text="@string/neko_no_d"
|
||||
android:textSize="35sp"
|
||||
/>
|
||||
android:textSize="35sp" />
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/P6_vp_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_height="450dp"/>
|
||||
android:layout_height="450dp"
|
||||
android:layout_marginTop="5dp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -38,21 +38,23 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:text="@string/auto_show"/>
|
||||
android:text="@string/auto_show" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P6SetWorkButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/add_work"/>
|
||||
android:text="@string/add_work" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P6NextPage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:backgroundTint="?colorPrimary"
|
||||
android:text="@string/next_page"/>
|
||||
android:text="@string/next_page" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,136 +1,169 @@
|
|||
<?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=".Page7">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:layout_marginVertical="20dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="5dp"
|
||||
>
|
||||
android:layout_marginVertical="5dp">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/P7SendMessageText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:inputType="text"
|
||||
android:text="Text Message"
|
||||
android:hint="Text Message"
|
||||
/>
|
||||
android:layout_weight="1"
|
||||
android:hint="@string/text_message"
|
||||
android:inputType="text" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7SendMessageButton"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/send_text"
|
||||
android:textAllCaps="false"
|
||||
/>
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="5dp"
|
||||
>
|
||||
android:layout_marginVertical="5dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7RecordAudio"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/record_audio"
|
||||
android:textAllCaps="false"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
/>
|
||||
android:text="@string/record_audio"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7ListenAudio"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/play"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:enabled="false"
|
||||
/>
|
||||
android:text="@string/play"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7SendAudio"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/send"
|
||||
android:textAllCaps="false"
|
||||
/>
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="5dp"
|
||||
>
|
||||
android:layout_marginVertical="5dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7ShotPhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorTertiary"
|
||||
android:text="@string/take_photo"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7ViewPhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_weight="1"
|
||||
android:backgroundTint="?colorSecondary"
|
||||
android:enabled="false"
|
||||
android:text="@string/show"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7SendPhoto"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/send"
|
||||
android:textAllCaps="false" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="5dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7SetAPI"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/settings"
|
||||
/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7ShowResult"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_height="match_parent"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/show_callback"
|
||||
/>
|
||||
android:textAllCaps="false" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7NextPage"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/next_page"
|
||||
/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/next_page" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/P7ResultFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/P7ResultFrame"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginVertical="25dp"
|
||||
android:visibility="invisible"
|
||||
android:background="@drawable/p7_result_layout"
|
||||
>
|
||||
android:visibility="invisible">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="55dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="15dp"
|
||||
android:textSize="40sp"
|
||||
android:text="@string/result"/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/result"
|
||||
android:textSize="40sp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/P7CloseResultButton"
|
||||
|
@ -146,45 +179,48 @@
|
|||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginHorizontal="5dp">
|
||||
android:layout_marginHorizontal="5dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/P7Result"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="22sp"
|
||||
android:fontFamily="monospace"
|
||||
android:minHeight="50dp"
|
||||
android:text=""/>
|
||||
android:text=""
|
||||
android:textSize="22sp" />
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/P7SetAPIFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/P7SetAPIFrame"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_marginVertical="120dp"
|
||||
android:background="@drawable/p7_result_layout"
|
||||
android:visibility="invisible"
|
||||
>
|
||||
android:visibility="invisible">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="55dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="15dp"
|
||||
android:textSize="40sp"
|
||||
android:text="@string/settings"/>
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings"
|
||||
android:textSize="40sp" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/P7CloseAPIButton"
|
||||
|
@ -200,55 +236,57 @@
|
|||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="30sp"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:text="@string/bot_api_key"/>
|
||||
android:text="@string/bot_api_key"
|
||||
android:textSize="30sp" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/Page7BotID"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textPassword"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:ems="10"
|
||||
android:hint="@string/test_api_key"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textPassword" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:textSize="30sp"
|
||||
android:text="@string/chat_id"/>
|
||||
android:text="@string/chat_id"
|
||||
android:textSize="30sp" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/Page7ChatID"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:ems="10"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="numberSigned"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:ems="10"
|
||||
android:hint="@string/_123456"
|
||||
/>
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="numberSigned" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/P7SaveAndSetAPI"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/save_and_test"
|
||||
android:textAllCaps="false"
|
||||
/>
|
||||
android:textAllCaps="false" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -1,37 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".SettingPage"
|
||||
>
|
||||
tools:context=".SettingPage">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="serif-monospace"
|
||||
android:text="@string/settings"
|
||||
android:textSize="45sp"
|
||||
android:fontFamily="serif-monospace"/>
|
||||
android:textSize="45sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:layout_marginHorizontal="20sp"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/set_default_theme"
|
||||
android:textSize="30sp"/>
|
||||
android:textSize="30sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -85,19 +85,17 @@
|
|||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/SettingPageSubmit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/finish_button"
|
||||
android:textSize="35sp"
|
||||
android:textAllCaps="false"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:layout_marginHorizontal="60sp"
|
||||
/>
|
||||
android:layout_marginBottom="20dp"
|
||||
android:text="@string/finish_button"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="35sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<style name="Theme.Android101" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/tfb</item>
|
||||
<item name="colorPrimaryVariant">@color/tfp </item>
|
||||
<item name="colorPrimaryVariant">@color/tfp</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<!-- Status bar color. -->
|
||||
|
|
|
@ -63,4 +63,10 @@
|
|||
<string name="record_audio">录音</string>
|
||||
<string name="send">发送</string>
|
||||
<string name="play">播放</string>
|
||||
<string name="show">查看图片</string>
|
||||
<string name="take_photo">拍照</string>
|
||||
<string name="use">使用</string>
|
||||
<string name="shot">拍照</string>
|
||||
<string name="retake">重拍</string>
|
||||
<string name="text_message">这是文本消息喵</string>
|
||||
</resources>
|
|
@ -65,4 +65,10 @@
|
|||
<string name="record_audio">Record Audio</string>
|
||||
<string name="send">Send</string>
|
||||
<string name="play">Play</string>
|
||||
<string name="show">Show</string>
|
||||
<string name="take_photo">Take Photo</string>
|
||||
<string name="use">Use</string>
|
||||
<string name="shot">Shot</string>
|
||||
<string name="retake">Retake</string>
|
||||
<string name="text_message">Text Message</string>
|
||||
</resources>
|
|
@ -11,10 +11,11 @@
|
|||
<item name="android:statusBarColor">#0D47A1</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<style name="Theme.TODOList" parent="android:Theme.Material.Light.NoActionBar" />
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.TODOList" parent="Theme.Material3.DayNight.NoActionBar"/>
|
||||
|
||||
<style name="Base.Theme.TODOList" parent="Theme.Material3.DayNight.NoActionBar" />
|
||||
|
||||
<style name="Theme.Blue" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<item name="colorPrimary">#039BE5</item>
|
||||
<item name="colorSecondary">#03e5bf</item>
|
||||
|
@ -34,6 +35,7 @@
|
|||
<item name="overlapAnchor">false</item>
|
||||
<item name="android:dropDownVerticalOffset">?attr/actionBarSize</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Red" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<item name="colorPrimary">#E57373</item>
|
||||
<item name="colorSecondary">#e573ac</item>
|
||||
|
@ -43,6 +45,7 @@
|
|||
<item name="overlapAnchor">false</item>
|
||||
<item name="android:dropDownVerticalOffset">?attr/actionBarSize</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Cyan" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<item name="colorPrimary">#00ACC1</item>
|
||||
<item name="colorSecondary">#00c177</item>
|
||||
|
@ -52,6 +55,7 @@
|
|||
<item name="overlapAnchor">false</item>
|
||||
<item name="android:dropDownVerticalOffset">?attr/actionBarSize</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Pink" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<item name="colorPrimary">#FF80AB</item>
|
||||
<item name="colorSecondary">#ff80ea</item>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<shortcut
|
||||
android:shortcutId="start_TODO"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/ic_launcher_todo"
|
||||
android:shortcutShortLabel="@string/todo_app_short_label"
|
||||
android:shortcutDisabledMessage="@string/todo_app"
|
||||
android:shortcutId="start_TODO"
|
||||
android:shortcutLongLabel="@string/todo_app"
|
||||
android:shortcutDisabledMessage="@string/todo_app">
|
||||
android:shortcutShortLabel="@string/todo_app_short_label">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:targetPackage="uk.kagurach.android101"
|
||||
android:targetClass="uk.kagurach.android101.todoList.TodoListMainActivity" />
|
||||
android:targetClass="uk.kagurach.android101.todoList.TodoListMainActivity"
|
||||
android:targetPackage="uk.kagurach.android101" />
|
||||
<categories android:name="android.shortcut.conversation" />
|
||||
<capability-binding android:key="actions.intent.CREATE_MESSAGE" />
|
||||
</shortcut>
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
package uk.kagurach.android101
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
|
|
|
@ -8,23 +8,25 @@ junitVersion = "1.2.1"
|
|||
espressoCore = "3.6.1"
|
||||
appcompat = "1.7.0"
|
||||
material = "1.12.0"
|
||||
activity = "1.9.0"
|
||||
activity = "1.9.1"
|
||||
constraintlayout = "2.1.4"
|
||||
lifecycleRuntimeKtx = "2.8.3"
|
||||
activityCompose = "1.9.0"
|
||||
lifecycleRuntimeKtx = "2.8.4"
|
||||
activityCompose = "1.9.1"
|
||||
composeBom = "2024.06.00"
|
||||
roomCommon = "2.6.1"
|
||||
roomKtx = "2.6.1"
|
||||
navigationFragmentKtx = "2.7.7"
|
||||
navigationUiKtx = "2.7.7"
|
||||
annotation = "1.8.0"
|
||||
lifecycleLivedataKtx = "2.8.3"
|
||||
lifecycleViewmodelKtx = "2.8.3"
|
||||
annotation = "1.8.1"
|
||||
lifecycleLivedataKtx = "2.8.4"
|
||||
lifecycleViewmodelKtx = "2.8.4"
|
||||
datastoreRxjava3 = "1.1.1"
|
||||
androidxWork = "2.9.0"
|
||||
okHttp3 = "4.9.3"
|
||||
moshiJson = "1.15.1"
|
||||
ffmpegKit = "6.0-2"
|
||||
cameraX = "1.3.4"
|
||||
cameraView = "1.3.4"
|
||||
|
||||
[libraries]
|
||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||||
|
@ -55,6 +57,10 @@ androidx-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecy
|
|||
androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" }
|
||||
androidx-datastore-rxjava3 = { group = "androidx.datastore", name = "datastore-rxjava3", version.ref = "datastoreRxjava3" }
|
||||
androidx-work = { group = "androidx.work", name="work-runtime", version.ref = "androidxWork" }
|
||||
androidx-camera-core = { group = "androidx.camera",name = "camera-core",version.ref="cameraX"}
|
||||
androidx-camera-camera2 = { group = "androidx.camera",name = "camera-camera2",version.ref="cameraX"}
|
||||
androidx-camera-lifecycle = { group = "androidx.camera",name = "camera-lifecycle",version.ref="cameraX"}
|
||||
androidx-camera-view = { group = "androidx.camera",name="camera-view",version.ref="cameraView"}
|
||||
|
||||
okhttp3 = { group = "com.squareup.okhttp3", name="okhttp",version.ref="okHttp3"}
|
||||
moshi = {group="com.squareup.moshi",name="moshi-kotlin",version.ref="moshiJson"}
|
||||
|
|
Loading…
Reference in a new issue