Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
NewParkAPP
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
YONG-LIN SU
NewParkAPP
Commits
2f612abc
Commit
2f612abc
authored
Aug 02, 2022
by
YONG-LIN SU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
清冊功能完成
parent
ce06c300
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
534 additions
and
16 deletions
+534
-16
deploymentTargetDropDown.xml
.idea/deploymentTargetDropDown.xml
+1
-1
misc.xml
.idea/misc.xml
+3
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+3
-8
Common.java
app/src/main/java/ecom/android/newparkapp/Common.java
+1
-1
CaseListAdapter.java
...java/ecom/android/newparkapp/adapter/CaseListAdapter.java
+111
-0
CaseDao.java
app/src/main/java/ecom/android/newparkapp/dao/CaseDao.java
+5
-0
CaseDatabase.java
...n/java/ecom/android/newparkapp/database/CaseDatabase.java
+2
-1
CaseAndAllCasePhoto.java
...a/ecom/android/newparkapp/entity/CaseAndAllCasePhoto.java
+15
-0
T02StartActivity.java
...n/java/ecom/android/newparkapp/view/T02StartActivity.java
+27
-4
T03ListFilesActivity.java
...va/ecom/android/newparkapp/view/T03ListFilesActivity.java
+58
-0
T02StartViewModel.java
.../ecom/android/newparkapp/viewModel/T02StartViewModel.java
+24
-0
ic_baseline_zoom_in_24.xml
app/src/main/res/drawable/ic_baseline_zoom_in_24.xml
+17
-0
activity_t03_list_files.xml
app/src/main/res/layout/activity_t03_list_files.xml
+17
-0
card_view_list_files_item.xml
app/src/main/res/layout/card_view_list_files_item.xml
+223
-0
PlateModifyByRuleUnitTest.java
...va/ecom/android/newparkapp/PlateModifyByRuleUnitTest.java
+27
-1
No files found.
.idea/deploymentTargetDropDown.xml
View file @
2f612abc
...
...
@@ -12,6 +12,6 @@
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown
value=
"2022-08-0
1T01:49:20.4227441
00Z"
/>
<timeTargetWasSelectedWithDropDown
value=
"2022-08-0
2T03:29:02.3388783
00Z"
/>
</component>
</project>
\ No newline at end of file
.idea/misc.xml
View file @
2f612abc
...
...
@@ -30,12 +30,15 @@
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_start.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t03_cumulative.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t03_img_viewer.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t03_list_files.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/alert_dialog_t03_cumulative_time.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/card_view_image_plate_number_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/card_view_list_files_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/content_t02_select_road.xml"
value=
"0.1875"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_bulletin_board_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_db_table_item.xml"
value=
"0.33"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_list_files_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_road_item.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_space_item.xml"
value=
"0.24954710144927536"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_vehicle_type_item.xml"
value=
"0.34375"
/>
...
...
app/src/main/AndroidManifest.xml
View file @
2f612abc
...
...
@@ -27,7 +27,9 @@
android:supportsRtl=
"true"
android:theme=
"@style/Theme.AppCompat.Light.NoActionBar"
tools:targetApi=
"31"
>
<activity
android:name=
".view.T03ListFilesActivity"
android:exported=
"false"
/>
<activity
android:name=
".view.MainActivity"
android:exported=
"true"
>
...
...
@@ -37,8 +39,6 @@
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity
android:name=
".view.T01SettingActivity"
android:exported=
"false"
...
...
@@ -53,9 +53,6 @@
android:exported=
"false"
android:label=
"系統公告"
android:theme=
"@style/Theme.AppCompat.Light"
/>
<activity
android:name=
".view.T02KeyInPlateNumberActivity"
android:exported=
"false"
/>
...
...
@@ -74,8 +71,6 @@
<activity
android:name=
".view.T02SelectUserActivity"
android:exported=
"false"
/>
<activity
android:name=
".view.T03ImgViewerActivity"
android:exported=
"false"
/>
...
...
app/src/main/java/ecom/android/newparkapp/Common.java
View file @
2f612abc
...
...
@@ -590,7 +590,7 @@ public class Common {
public
static
boolean
plateRuleCheck
(
String
plateNumber
)
{
boolean
isLegal
=
true
;
// 空字串處理
if
(
plateNumber
==
null
||
plateNumber
.
length
()
==
0
||
plateNumber
.
trim
().
isEmpty
()
||
plateNumber
.
length
()
>
7
){
if
(
plateNumber
==
null
||
plateNumber
.
length
()
==
0
||
plateNumber
.
trim
().
isEmpty
()
||
plateNumber
.
length
()
>
8
){
isLegal
=
false
;
}
return
isLegal
;
...
...
app/src/main/java/ecom/android/newparkapp/adapter/CaseListAdapter.java
0 → 100644
View file @
2f612abc
package
ecom
.
android
.
newparkapp
.
adapter
;
import
android.graphics.Bitmap
;
import
android.graphics.BitmapFactory
;
import
android.view.LayoutInflater
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
import
androidx.recyclerview.widget.DiffUtil
;
import
androidx.recyclerview.widget.ListAdapter
;
import
androidx.recyclerview.widget.RecyclerView
;
import
java.io.File
;
import
java.text.SimpleDateFormat
;
import
ecom.android.newparkapp.databinding.CardViewListFilesItemBinding
;
import
ecom.android.newparkapp.entity.CaseAndAllCasePhoto
;
public
class
CaseListAdapter
extends
ListAdapter
<
CaseAndAllCasePhoto
,
CaseListAdapter
.
CaseListViewHolder
>
{
final
private
OnItemClickListener
onItemClickListener
;
public
CaseListAdapter
(
OnItemClickListener
onItemClickListener
){
super
(
caseItemCallback
);
this
.
onItemClickListener
=
onItemClickListener
;
}
@NonNull
@Override
public
CaseListViewHolder
onCreateViewHolder
(
@NonNull
ViewGroup
parent
,
int
viewType
)
{
CardViewListFilesItemBinding
cardViewListFilesItemBinding
=
CardViewListFilesItemBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
getContext
()),
parent
,
false
);
return
new
CaseListViewHolder
(
cardViewListFilesItemBinding
);
}
@Override
public
void
onBindViewHolder
(
@NonNull
CaseListViewHolder
holder
,
int
position
)
{
holder
.
setBinding
(
getItem
(
position
),
position
,
onItemClickListener
);
}
public
static
final
DiffUtil
.
ItemCallback
<
CaseAndAllCasePhoto
>
caseItemCallback
=
new
DiffUtil
.
ItemCallback
<
CaseAndAllCasePhoto
>()
{
@Override
public
boolean
areItemsTheSame
(
@NonNull
CaseAndAllCasePhoto
oldItem
,
@NonNull
CaseAndAllCasePhoto
newItem
)
{
return
oldItem
.
thisCase
.
billingNumber2
.
equals
(
newItem
.
thisCase
.
billingNumber2
);
}
@Override
public
boolean
areContentsTheSame
(
@NonNull
CaseAndAllCasePhoto
oldItem
,
@NonNull
CaseAndAllCasePhoto
newItem
)
{
return
false
;
}
};
static
class
CaseListViewHolder
extends
RecyclerView
.
ViewHolder
{
private
CardViewListFilesItemBinding
dataBinding
;
CaseListViewHolder
(
CardViewListFilesItemBinding
dataBinding
)
{
super
(
dataBinding
.
getRoot
());
this
.
dataBinding
=
dataBinding
;
}
void
setBinding
(
CaseAndAllCasePhoto
caseAndAllCasePhoto
,
int
position
,
OnItemClickListener
onItemClickListener
){
// 車格編號
dataBinding
.
txvParkingSpace
.
setText
(
caseAndAllCasePhoto
.
thisCase
.
space
.
id
);
// 時間
SimpleDateFormat
simpleDate
=
new
SimpleDateFormat
(
"HH:mm"
);
dataBinding
.
txvTime
.
setText
(
simpleDate
.
format
(
caseAndAllCasePhoto
.
thisCase
.
caseTime
));
// 車牌
dataBinding
.
txvPlateNumber
.
setText
(
caseAndAllCasePhoto
.
thisCase
.
plateNumber
);
// 單號 billingNumber2
dataBinding
.
txvBillingNumber2
.
setText
(
caseAndAllCasePhoto
.
thisCase
.
billingNumber2
);
// 狀態
dataBinding
.
txvStatus
.
setText
(
String
.
valueOf
(
caseAndAllCasePhoto
.
thisCase
.
billStatus
));
// 時數
dataBinding
.
txvHours
.
setText
(
String
.
valueOf
(
caseAndAllCasePhoto
.
thisCase
.
periodHour
));
// 第一張 照片
// TODO: 2022/8/1 取得第一張 照片作為展示之用途
File
file
=
null
;
for
(
int
i
=
0
;
i
<
caseAndAllCasePhoto
.
casePhotos
.
size
();
i
++){
file
=
new
File
(
caseAndAllCasePhoto
.
casePhotos
.
get
(
i
).
photoPath
);
if
(
file
.
isFile
()){
break
;
}
}
if
(
file
!=
null
&&
file
.
isFile
()){
Bitmap
bitmap
=
BitmapFactory
.
decodeFile
(
file
.
getAbsolutePath
());
dataBinding
.
imageId
.
setImageBitmap
(
bitmap
);
}
// 設置當前 index
dataBinding
.
txvItemIndex
.
setText
(
String
.
valueOf
(
position
));
// 設置放大按鈕 顯示圖片
dataBinding
.
imgZoom
.
setOnClickListener
(
view
->
{
onItemClickListener
.
onZoomClick
(
caseAndAllCasePhoto
.
thisCase
.
billingNumber2
);
});
// 設置案件選取事件
dataBinding
.
cardview
.
setOnClickListener
(
view
->
{
onItemClickListener
.
onCaseClick
(
position
);
});
}
}
public
interface
OnItemClickListener
{
void
onCaseClick
(
int
position
);
void
onZoomClick
(
String
billingNumber2
);
}
}
app/src/main/java/ecom/android/newparkapp/dao/CaseDao.java
View file @
2f612abc
...
...
@@ -10,9 +10,14 @@ import androidx.room.Update;
import
java.util.List
;
import
ecom.android.newparkapp.entity.Case
;
import
ecom.android.newparkapp.entity.CaseAndAllCasePhoto
;
@Dao
public
interface
CaseDao
{
@Query
(
"SELECT * FROM `case`"
)
List
<
CaseAndAllCasePhoto
>
getAllWithCasePhoto
();
@Query
(
"SELECT * FROM `case`"
)
List
<
Case
>
getAll
();
...
...
app/src/main/java/ecom/android/newparkapp/database/CaseDatabase.java
View file @
2f612abc
...
...
@@ -9,11 +9,12 @@ import androidx.room.TypeConverters;
import
ecom.android.newparkapp.dao.CaseDao
;
import
ecom.android.newparkapp.entity.Case
;
import
ecom.android.newparkapp.entity.CasePhoto
;
import
ecom.android.newparkapp.entity.LocationConverter
;
import
ecom.android.newparkapp.entity.TimestampConverter
;
import
ecom.android.newparkapp.R
;
@Database
(
entities
=
{
Case
.
class
},
version
=
1
)
@Database
(
entities
=
{
Case
.
class
,
CasePhoto
.
class
},
version
=
1
)
@TypeConverters
({
LocationConverter
.
class
,
TimestampConverter
.
class
})
public
abstract
class
CaseDatabase
extends
RoomDatabase
{
public
abstract
CaseDao
caseDao
();
...
...
app/src/main/java/ecom/android/newparkapp/entity/CaseAndAllCasePhoto.java
0 → 100644
View file @
2f612abc
package
ecom
.
android
.
newparkapp
.
entity
;
import
androidx.room.Embedded
;
import
androidx.room.Relation
;
import
java.util.List
;
public
class
CaseAndAllCasePhoto
{
@Embedded
public
Case
thisCase
;
@Relation
(
parentColumn
=
"billingNumber2"
,
entityColumn
=
"case_billing_number2"
)
public
List
<
CasePhoto
>
casePhotos
;
}
app/src/main/java/ecom/android/newparkapp/view/T02StartActivity.java
View file @
2f612abc
...
...
@@ -43,6 +43,7 @@ public class T02StartActivity extends AppCompatActivity {
private
ActivityResultLauncher
plateNumberResultLauncher
;
private
ActivityResultLauncher
takePhotosActivityResultLauncher
;
private
ActivityResultLauncher
cumulativeTimeActivityResultLauncher
;
private
ActivityResultLauncher
inventoryActivityResultLauncher
;
private
User
currentUser
;
private
File
photoFile
;
...
...
@@ -78,6 +79,7 @@ public class T02StartActivity extends AppCompatActivity {
dataBinding
.
btnPageUp
.
setOnClickListener
(
v
->
btnPageUpOnClicked
());
dataBinding
.
btnPhotoCount
.
setOnClickListener
(
v
->
btnPhotoCountOnClicked
());
dataBinding
.
btnCumulativeTime
.
setOnClickListener
(
v
->
btnCumulativeTimeOnClicked
());
dataBinding
.
btnInventory
.
setOnClickListener
(
v
->
btnInventoryOnClicked
());
dataBinding
.
btnStartBack
.
setOnClickListener
(
v
->
{
finish
();});
...
...
@@ -129,6 +131,20 @@ public class T02StartActivity extends AppCompatActivity {
}
});
inventoryActivityResultLauncher
=
registerForActivityResult
(
new
ActivityResultContracts
.
StartActivityForResult
(),
result
->
{
if
(
result
.
getResultCode
()
==
RESULT_OK
&&
result
.
getData
()
!=
null
){
int
position
=
result
.
getData
().
getIntExtra
(
"Position"
,
-
1
);
boolean
hasCase
=
false
;
if
(
position
>=
0
){
hasCase
=
t02StartViewModel
.
go2Page
(
position
);
}
if
(!
hasCase
){
Toast
.
makeText
(
this
,
"指標索引錯誤"
,
Toast
.
LENGTH_SHORT
).
show
();
}
}
});
}
private
void
observeBinding
(){
...
...
@@ -266,14 +282,15 @@ public class T02StartActivity extends AppCompatActivity {
startActivity
(
intent
);
}
private
void
btnCumulativeTimeOnClicked
(){
Case
tempCase
=
t02StartViewModel
.
getCurrentCase
().
getValue
();
if
(
tempCase
==
null
){
return
;}
//
if (tempCase.caseStatus == CaseStatus.NEW){
//
Toast.makeText(this, "請先設定格位", Toast.LENGTH_SHORT).show();
//
return;
//
}
if
(
tempCase
.
caseStatus
==
CaseStatus
.
NEW
){
Toast
.
makeText
(
this
,
"請先設定格位"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
}
AlertDialogT03CumulativeTimeBinding
t03CumulativeTimeDataBinding
=
AlertDialogT03CumulativeTimeBinding
.
inflate
(
LayoutInflater
.
from
(
this
));
AlertDialog
.
Builder
alertDialog
=
new
AlertDialog
.
Builder
(
this
);
...
...
@@ -327,4 +344,10 @@ public class T02StartActivity extends AppCompatActivity {
tempDialog
.
show
();
}
private
void
btnInventoryOnClicked
(){
Intent
intent
=
new
Intent
();
intent
.
setClass
(
this
,
T03ListFilesActivity
.
class
);
inventoryActivityResultLauncher
.
launch
(
intent
);
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/view/T03ListFilesActivity.java
0 → 100644
View file @
2f612abc
package
ecom
.
android
.
newparkapp
.
view
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
java.util.List
;
import
ecom.android.newparkapp.R
;
import
ecom.android.newparkapp.adapter.CaseListAdapter
;
import
ecom.android.newparkapp.databinding.ActivityT03ListFilesBinding
;
import
ecom.android.newparkapp.entity.Case
;
import
ecom.android.newparkapp.entity.CaseAndAllCasePhoto
;
import
ecom.android.newparkapp.repository.InfoRepository
;
public
class
T03ListFilesActivity
extends
AppCompatActivity
{
private
ActivityT03ListFilesBinding
dataBinding
;
private
CaseListAdapter
caseListAdapter
;
private
InfoRepository
infoRepository
;
private
List
<
CaseAndAllCasePhoto
>
caseAndAllCasePhotos
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
dataBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_t03_list_files
);
caseListAdapter
=
new
CaseListAdapter
(
new
CaseListAdapter
.
OnItemClickListener
()
{
@Override
public
void
onCaseClick
(
int
position
)
{
// 回傳選取的案件
Intent
intent
=
getIntent
();
intent
.
putExtra
(
"Position"
,
position
);
setResult
(
RESULT_OK
,
intent
);
finish
();
}
@Override
public
void
onZoomClick
(
String
billingNumber2
)
{
// 顯示案件圖片
Intent
intent
=
new
Intent
();
intent
.
setClass
(
getApplication
(),
T03ImgViewerActivity
.
class
);
intent
.
putExtra
(
"BillingNumber2"
,
billingNumber2
);
startActivity
(
intent
);
}
});
infoRepository
=
new
InfoRepository
(
getApplication
());
caseAndAllCasePhotos
=
infoRepository
.
caseDao
.
getAllWithCasePhoto
();
caseListAdapter
.
submitList
(
caseAndAllCasePhotos
);
dataBinding
.
rvCaseList
.
setLayoutManager
(
new
LinearLayoutManager
(
this
));
dataBinding
.
rvCaseList
.
setAdapter
(
caseListAdapter
);
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/viewModel/T02StartViewModel.java
View file @
2f612abc
...
...
@@ -57,6 +57,7 @@ public class T02StartViewModel extends AndroidViewModel {
}
caseCursor
.
setValue
(
cases
.
size
());
}
public
LiveData
<
List
<
VehicleType
>>
getVehicleTypes
(){
...
...
@@ -191,6 +192,14 @@ public class T02StartViewModel extends AndroidViewModel {
}
tempCasePhoto
.
clear
();
// 更新併檔用文字檔
// TODO: 2022/8/1 更新併檔用文字檔
//Common.updateTXT(getApplication(), tempCase.datePath + tempCase.userDateFileName, tempCase.billingNumber2, tempCase.getDetailString());
//Common.writeTXT(getApplication(), tempCase.uploadPath, tempCase.getUploadFileName(), tempCase.getDetailString());
// TODO: 2022/8/1 判斷 是否 為 註銷
tempCase
.
caseStatus
=
CaseStatus
.
LIST
;
//saveBills
// 更新當前list結果
cases
.
set
(
caseCursor
.
getValue
(),
tempCase
);
});
...
...
@@ -388,6 +397,21 @@ public class T02StartViewModel extends AndroidViewModel {
}
public
boolean
go2Page
(
int
newCaseCursor
){
if
(
newCaseCursor
>
cases
.
size
()){
return
false
;
}
Case
tempCase
=
cases
.
get
(
newCaseCursor
);
if
(
tempCase
==
null
){
return
false
;
}
currentCase
.
setValue
(
tempCase
);
caseCursor
.
setValue
(
newCaseCursor
);
return
true
;
}
/**
* 累加時間處理
* @param photoFile 拍照傳回
...
...
app/src/main/res/drawable/ic_baseline_zoom_in_24.xml
0 → 100644
View file @
2f612abc
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"60dp"
android:height=
"60dp"
android:tint=
"@color/colorPrimary"
android:viewportWidth=
"40"
android:viewportHeight=
"40"
>
<group
android:translateX=
"15"
android:translateY=
"15"
>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"
/>
<path
android:fillColor=
"@android:color/white"
android:pathData=
"M12,10h-2v2H9v-2H7V9h2V7h1v2h2v1z"
/>
</group>
</vector>
app/src/main/res/layout/activity_t03_list_files.xml
0 → 100644
View file @
2f612abc
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
tools:context=
".view.T03ListFilesActivity"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_case_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:listitem=
"@layout/card_view_list_files_item"
/>
</LinearLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/card_view_list_files_item.xml
0 → 100644
View file @
2f612abc
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.cardview.widget.CardView
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/cardview"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"6dp"
android:padding=
"6dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/txv_item_index"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorPrimaryDark"
android:paddingStart=
"5dp"
android:paddingEnd=
"0dp"
android:text=
"001"
android:textSize=
"12sp"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:baselineAligned=
"false"
android:orientation=
"horizontal"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/ConstraintLayout"
android:layout_width=
"match_parent"
android:layout_height=
"230dp"
android:layout_margin=
"2dp"
android:layout_weight=
"0.6"
android:orientation=
"vertical"
tools:ignore=
"UseCompoundDrawables"
>
<ImageView
android:id=
"@+id/imageId"
android:layout_width=
"0dp"
android:layout_height=
"185dp"
android:background=
"@color/gray"
android:scaleType=
"center"
app:layout_constraintBottom_toTopOf=
"@+id/txv_parking_space"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.5"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:srcCompat=
"@drawable/ic_texture_black_24dp"
tools:ignore=
"ContentDescription"
/>
<TextView
android:id=
"@+id/txv_parking_space"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:text=
"A217"
android:textColor=
"@color/green_3"
android:textSize=
"28sp"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0.5"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/imageId"
/>
<ImageView
android:id=
"@+id/imgZoom"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:layout_constraintBottom_toBottomOf=
"@+id/imageId"
app:layout_constraintEnd_toEndOf=
"parent"
app:srcCompat=
"@drawable/ic_baseline_zoom_in_24"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_margin=
"2dp"
android:layout_weight=
"0.4"
android:orientation=
"vertical"
android:paddingStart=
"10dp"
android:paddingEnd=
"0dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:orientation=
"horizontal"
tools:ignore=
"NestedWeights"
>
<TextView
android:id=
"@+id/txv_1"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:gravity=
"center_vertical"
android:text=
"時間:"
android:textAllCaps=
"false"
android:textColor=
"#000000"
android:textSize=
"28sp"
/>
<TextView
android:id=
"@+id/txv_time"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center"
android:text=
"12:34"
android:textColor=
"@color/yellow_2"
android:textSize=
"28sp"
android:textStyle=
"bold"
tools:ignore=
"NestedWeights"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/txv_2"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:gravity=
"center_vertical"
android:text=
"車牌:"
android:textColor=
"#000000"
android:textSize=
"22sp"
/>
<TextView
android:id=
"@+id/txv_plate_number"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center"
android:text=
"ABCD-1234"
android:textSize=
"22sp"
android:textStyle=
"bold"
tools:ignore=
"NestedWeights"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/txv_3"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:gravity=
"center_vertical"
android:text=
"單號:"
android:textColor=
"#000000"
android:textSize=
"22sp"
/>
<TextView
android:id=
"@+id/txv_billing_number2"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center"
android:textSize=
"22sp"
tools:ignore=
"NestedWeights"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/txv_4"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center_vertical"
android:text=
"狀態:"
android:textColor=
"#000000"
android:textSize=
"22sp"
tools:ignore=
"NestedWeights"
/>
<TextView
android:id=
"@+id/txv_status"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center_vertical"
android:textSize=
"22sp"
/>
<TextView
android:id=
"@+id/txv_5"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center_vertical"
android:text=
"時數:"
android:textColor=
"#000000"
android:textSize=
"22sp"
/>
<TextView
android:id=
"@+id/txv_hours"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:gravity=
"center_vertical"
android:textSize=
"22sp"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>
\ No newline at end of file
app/src/test/java/ecom/android/newparkapp/PlateModifyByRuleUnitTest.java
View file @
2f612abc
package
ecom
.
android
.
newparkapp
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
ecom
.
android
.
newparkapp
.
Common
.
plateModifyByRule
;
import
static
ecom
.
android
.
newparkapp
.
Common
.
plateRuleCheck
;
import
org.junit.Test
;
...
...
@@ -11,6 +14,8 @@ public class PlateModifyByRuleUnitTest {
String
plateNumber
=
"AXV-5918"
;
String
newPlateNumber
=
plateModifyByRule
(
plateNumber
);
assertEquals
(
newPlateNumber
,
plateNumber
);
assertTrue
(
plateRuleCheck
(
newPlateNumber
));
}
@Test
...
...
@@ -18,6 +23,8 @@ public class PlateModifyByRuleUnitTest {
String
plateNumber
=
"8052-LZ"
;
String
newPlateNumber
=
plateModifyByRule
(
plateNumber
);
assertEquals
(
newPlateNumber
,
plateNumber
);
assertTrue
(
plateRuleCheck
(
newPlateNumber
));
}
@Test
...
...
@@ -25,6 +32,8 @@ public class PlateModifyByRuleUnitTest {
String
plateNumber
=
"0X-2532"
;
String
newPlateNumber
=
plateModifyByRule
(
plateNumber
);
assertEquals
(
newPlateNumber
,
"OX-2532"
);
assertTrue
(
plateRuleCheck
(
newPlateNumber
));
}
@Test
...
...
@@ -32,14 +41,31 @@ public class PlateModifyByRuleUnitTest {
String
plateNumber
=
"1F-5545"
;
String
newPlateNumber
=
plateModifyByRule
(
plateNumber
);
assertEquals
(
newPlateNumber
,
"IF-5545"
);
assertTrue
(
plateRuleCheck
(
newPlateNumber
));
}
@Test
public
void
over_seven_number_plate
(){
String
plateNumber
=
"AXV-59187"
;
String
newPlateNumber
=
plateModifyByRule
(
plateNumber
);
assertEquals
(
newPlateNumber
,
"AXV-5918"
);
assertFalse
(
plateRuleCheck
(
plateNumber
));
assertTrue
(
plateRuleCheck
(
newPlateNumber
));
}
@Test
public
void
empty_plate
(){
String
emptyPlate
=
""
;
assertFalse
(
plateRuleCheck
(
emptyPlate
));
}
@Test
public
void
space_string_plate
(){
String
spaceStringPlate
=
" "
;
assertFalse
(
plateRuleCheck
(
spaceStringPlate
));
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment