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
fdd4860a
Commit
fdd4860a
authored
Jul 28, 2022
by
Bruce
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/origin/master'
parents
74f29d79
be9849d8
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
508 additions
and
37 deletions
+508
-37
misc.xml
.idea/misc.xml
+2
-0
vcs.xml
.idea/vcs.xml
+6
-0
build.gradle
app/build.gradle
+2
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+3
-5
FirstFragment.java
app/src/main/java/ecom/android/newparkapp/FirstFragment.java
+47
-0
SecondFragment.java
...src/main/java/ecom/android/newparkapp/SecondFragment.java
+47
-0
SelectRoadAdapter.java
...va/ecom/android/newparkapp/adapter/SelectRoadAdapter.java
+64
-0
SpaceDao.java
app/src/main/java/ecom/android/newparkapp/dao/SpaceDao.java
+6
-0
MainActivity.java
.../main/java/ecom/android/newparkapp/view/MainActivity.java
+6
-0
T02SelectRoadActivity.java
...a/ecom/android/newparkapp/view/T02SelectRoadActivity.java
+51
-0
T02SelectSpaceActivity.java
.../ecom/android/newparkapp/view/T02SelectSpaceActivity.java
+47
-6
T02SelectVehicleTypeActivity.java
...android/newparkapp/view/T02SelectVehicleTypeActivity.java
+6
-4
T02StartActivity.java
...n/java/ecom/android/newparkapp/view/T02StartActivity.java
+1
-21
T02SelectSpaceViewModel.java
...android/newparkapp/viewModel/T02SelectSpaceViewModel.java
+30
-0
activity_t02_select_road.xml
app/src/main/res/layout/activity_t02_select_road.xml
+44
-0
activity_t02_start.xml
app/src/main/res/layout/activity_t02_start.xml
+5
-1
content_t02_select_road.xml
app/src/main/res/layout/content_t02_select_road.xml
+19
-0
fragment_first.xml
app/src/main/res/layout/fragment_first.xml
+28
-0
fragment_second.xml
app/src/main/res/layout/fragment_second.xml
+27
-0
recycler_view_road_item.xml
app/src/main/res/layout/recycler_view_road_item.xml
+9
-0
nav_graph.xml
app/src/main/res/navigation/nav_graph.xml
+28
-0
dimens.xml
app/src/main/res/values-land/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values-w1240dp/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values-w600dp/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values/dimens.xml
+3
-0
strings.xml
app/src/main/res/values/strings.xml
+9
-0
themes.xml
app/src/main/res/values/themes.xml
+9
-0
No files found.
.idea/misc.xml
View file @
fdd4860a
...
...
@@ -22,12 +22,14 @@
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_main.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t01_bulletin_board.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t01_import_db.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_road.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_space.xml"
value=
"0.34375"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_vehicle_type.xml"
value=
"0.34375"
/>
<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/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_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"
/>
<entry
key=
"..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/mipmap-anydpi-v26/ic_icon_launcher.xml"
value=
"0.2985"
/>
...
...
.idea/vcs.xml
0 → 100644
View file @
fdd4860a
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"VcsDirectoryMappings"
>
<mapping
directory=
"$PROJECT_DIR$"
vcs=
"Git"
/>
</component>
</project>
\ No newline at end of file
app/build.gradle
View file @
fdd4860a
...
...
@@ -43,6 +43,8 @@ dependencies {
implementation
'androidx.test:core:1.4.0'
implementation
'androidx.exifinterface:exifinterface:1.3.3'
implementation
'androidx.preference:preference:1.1.1'
implementation
'androidx.navigation:navigation-fragment:2.5.0'
implementation
'androidx.navigation:navigation-ui:2.5.0'
testImplementation
'junit:junit:4.13.2'
androidTestImplementation
'androidx.test.ext:junit:1.1.3'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.4.0'
...
...
app/src/main/AndroidManifest.xml
View file @
fdd4860a
...
...
@@ -27,7 +27,9 @@
android:supportsRtl=
"true"
android:theme=
"@style/Theme.AppCompat.Light.NoActionBar"
tools:targetApi=
"31"
>
<activity
android:name=
".view.T02SelectRoadActivity"
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"
...
...
@@ -56,7 +56,6 @@
<activity
android:name=
".view.T02StartActivity"
android:exported=
"false"
/>
<activity
android:name=
".view.T02SelectVehicleTypeActivity"
android:exported=
"false"
/>
...
...
@@ -67,7 +66,6 @@
android:name=
".view.T02SelectUserActivity"
android:exported=
"false"
/>
<provider
android:name=
"androidx.core.content.FileProvider"
android:authorities=
"ecom.android.newparkapp.fileprovider"
...
...
app/src/main/java/ecom/android/newparkapp/FirstFragment.java
0 → 100644
View file @
fdd4860a
package
ecom
.
android
.
newparkapp
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
import
androidx.fragment.app.Fragment
;
import
androidx.navigation.fragment.NavHostFragment
;
import
ecom.android.newparkapp.databinding.FragmentFirstBinding
;
public
class
FirstFragment
extends
Fragment
{
private
FragmentFirstBinding
binding
;
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
binding
=
FragmentFirstBinding
.
inflate
(
inflater
,
container
,
false
);
return
binding
.
getRoot
();
}
public
void
onViewCreated
(
@NonNull
View
view
,
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
binding
.
buttonFirst
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
NavHostFragment
.
findNavController
(
FirstFragment
.
this
)
.
navigate
(
R
.
id
.
action_FirstFragment_to_SecondFragment
);
}
});
}
@Override
public
void
onDestroyView
()
{
super
.
onDestroyView
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/SecondFragment.java
0 → 100644
View file @
fdd4860a
package
ecom
.
android
.
newparkapp
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
androidx.annotation.NonNull
;
import
androidx.fragment.app.Fragment
;
import
androidx.navigation.fragment.NavHostFragment
;
import
ecom.android.newparkapp.databinding.FragmentSecondBinding
;
public
class
SecondFragment
extends
Fragment
{
private
FragmentSecondBinding
binding
;
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
binding
=
FragmentSecondBinding
.
inflate
(
inflater
,
container
,
false
);
return
binding
.
getRoot
();
}
public
void
onViewCreated
(
@NonNull
View
view
,
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
binding
.
buttonSecond
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
NavHostFragment
.
findNavController
(
SecondFragment
.
this
)
.
navigate
(
R
.
id
.
action_SecondFragment_to_FirstFragment
);
}
});
}
@Override
public
void
onDestroyView
()
{
super
.
onDestroyView
();
binding
=
null
;
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/adapter/SelectRoadAdapter.java
0 → 100644
View file @
fdd4860a
package
ecom
.
android
.
newparkapp
.
adapter
;
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
ecom.android.newparkapp.databinding.RecyclerViewRoadItemBinding
;
import
ecom.android.newparkapp.entity.Road
;
import
ecom.android.newparkapp.entity.Space
;
public
class
SelectRoadAdapter
extends
ListAdapter
<
Road
,
SelectRoadAdapter
.
SelectRoadViewHolder
>
{
private
final
OnItemClickListener
onItemClickListener
;
public
SelectRoadAdapter
(
OnItemClickListener
onItemClickListener
)
{
super
(
roadItemCallback
);
this
.
onItemClickListener
=
onItemClickListener
;
}
@NonNull
@Override
public
SelectRoadViewHolder
onCreateViewHolder
(
@NonNull
ViewGroup
parent
,
int
viewType
)
{
RecyclerViewRoadItemBinding
recyclerViewRoadItemBinding
=
RecyclerViewRoadItemBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
getContext
()),
parent
,
false
);
return
new
SelectRoadViewHolder
(
recyclerViewRoadItemBinding
);
}
@Override
public
void
onBindViewHolder
(
@NonNull
SelectRoadViewHolder
holder
,
int
position
)
{
holder
.
setBinding
(
getItem
(
position
),
onItemClickListener
);
}
public
static
final
DiffUtil
.
ItemCallback
<
Road
>
roadItemCallback
=
new
DiffUtil
.
ItemCallback
<
Road
>()
{
@Override
public
boolean
areItemsTheSame
(
@NonNull
Road
oldItem
,
@NonNull
Road
newItem
)
{
return
oldItem
.
id
.
equals
(
newItem
.
id
);
}
@Override
public
boolean
areContentsTheSame
(
@NonNull
Road
oldItem
,
@NonNull
Road
newItem
)
{
return
false
;
}
};
static
class
SelectRoadViewHolder
extends
RecyclerView
.
ViewHolder
{
private
final
RecyclerViewRoadItemBinding
dataBinding
;
SelectRoadViewHolder
(
RecyclerViewRoadItemBinding
dataBinding
)
{
super
(
dataBinding
.
getRoot
());
this
.
dataBinding
=
dataBinding
;
}
void
setBinding
(
Road
road
,
OnItemClickListener
onItemClickListener
){
String
roadString
=
road
.
id
+
" "
+
road
.
name
;
dataBinding
.
btnSelectRoad
.
setText
(
roadString
);
dataBinding
.
btnSelectRoad
.
setOnClickListener
(
view
->
{
onItemClickListener
.
onSpaceClick
(
road
);
});
}
}
public
interface
OnItemClickListener
{
void
onSpaceClick
(
Road
road
);
}
}
app/src/main/java/ecom/android/newparkapp/dao/SpaceDao.java
View file @
fdd4860a
...
...
@@ -21,6 +21,12 @@ public interface SpaceDao {
@Query
(
"SELECT * FROM space WHERE id IN (:Ids)"
)
List
<
Space
>
loadAllByIds
(
int
[]
Ids
);
@Query
(
"SELECT * FROM space WHERE road_id=:RoadIds"
)
List
<
Space
>
loadAllByRoadId
(
String
RoadIds
);
@Query
(
"SELECT * FROM space WHERE road_id=:RoadIds"
)
LiveData
<
List
<
Space
>>
loadAllLiveDataByRoadId
(
String
RoadIds
);
@Insert
void
insertAll
(
Space
...
spaces
);
...
...
app/src/main/java/ecom/android/newparkapp/view/MainActivity.java
View file @
fdd4860a
...
...
@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.widget.Toast
;
import
ecom.android.newparkapp.R
;
import
ecom.android.newparkapp.databinding.ActivityMainBinding
;
...
...
@@ -44,6 +45,11 @@ public class MainActivity extends AppCompatActivity {
private
void
btnStartOnClicked
(){
if
(
userViewModel
.
getCurrentUser
().
getValue
()
==
null
){
Toast
.
makeText
(
this
,
"請先設定使用者"
,
Toast
.
LENGTH_LONG
).
show
();
return
;
}
Intent
intent
=
new
Intent
();
intent
.
setClass
(
this
,
T02StartActivity
.
class
);
intent
.
putExtra
(
"CurrentUser"
,
userViewModel
.
getCurrentUser
().
getValue
());
...
...
app/src/main/java/ecom/android/newparkapp/view/T02SelectRoadActivity.java
0 → 100644
View file @
fdd4860a
package
ecom
.
android
.
newparkapp
.
view
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.recyclerview.widget.GridLayoutManager
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
ecom.android.newparkapp.R
;
import
ecom.android.newparkapp.adapter.SelectRoadAdapter
;
import
ecom.android.newparkapp.databinding.ActivityT02SelectRoadBinding
;
import
ecom.android.newparkapp.entity.Road
;
import
ecom.android.newparkapp.repository.InfoRepository
;
public
class
T02SelectRoadActivity
extends
AppCompatActivity
{
private
ActivityT02SelectRoadBinding
dataBinding
;
private
SelectRoadAdapter
selectRoadAdapter
;
private
InfoRepository
infoRepository
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
dataBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_t02_select_road
);
infoRepository
=
new
InfoRepository
(
getApplication
());
dataBinding
.
rvRoadOption
.
setLayoutManager
(
new
GridLayoutManager
(
this
,
2
));
selectRoadAdapter
=
new
SelectRoadAdapter
(
road
->
{
roadSelected
(
road
);});
infoRepository
.
roadDao
.
getAllLiveData
().
observe
(
this
,
roads
->
{
selectRoadAdapter
.
submitList
(
roads
);});
dataBinding
.
rvRoadOption
.
setAdapter
(
selectRoadAdapter
);
dataBinding
.
btnSelectRoadBack
.
setOnClickListener
(
view
->
roadSelected
(
null
));
}
private
void
roadSelected
(
Road
road
){
if
(
road
==
null
){
setResult
(
RESULT_CANCELED
);
}
else
{
Intent
intent
=
getIntent
();
Bundle
bundle
=
new
Bundle
();
bundle
.
putParcelable
(
"Road"
,
road
);
intent
.
putExtras
(
bundle
);
setResult
(
RESULT_OK
,
intent
);
}
finish
();
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/view/T02SelectSpaceActivity.java
View file @
fdd4860a
package
ecom
.
android
.
newparkapp
.
view
;
import
androidx.activity.result.ActivityResultLauncher
;
import
androidx.activity.result.contract.ActivityResultContracts
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.databinding.DataBindingUtil
;
import
androidx.lifecycle.ViewModelProvider
;
...
...
@@ -8,8 +10,6 @@ import androidx.recyclerview.widget.GridLayoutManager;
import
android.content.Intent
;
import
android.os.Bundle
;
import
java.util.List
;
import
ecom.android.newparkapp.R
;
import
ecom.android.newparkapp.adapter.SelectSpaceAdapter
;
import
ecom.android.newparkapp.databinding.ActivityT02SelectSpaceBinding
;
...
...
@@ -21,21 +21,56 @@ public class T02SelectSpaceActivity extends AppCompatActivity {
private
ActivityT02SelectSpaceBinding
dataBinding
;
private
T02SelectSpaceViewModel
t02SelectSpaceViewModel
;
private
SelectSpaceAdapter
selectSpaceAdapter
;
private
ActivityResultLauncher
roadResultLauncher
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
dataBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_t02_select_space
);
t02SelectSpaceViewModel
=
new
ViewModelProvider
(
this
).
get
(
T02SelectSpaceViewModel
.
class
);
List
<
Road
>
roads
=
getIntent
().
getParcelableArrayListExtra
(
"RoadList"
);
List
<
Space
>
spaces
=
getIntent
().
getParcelableArrayListExtra
(
"SpaceList"
);
selectSpaceAdapter
=
new
SelectSpaceAdapter
(
space
->
spaceSelected
(
space
));
SelectSpaceAdapter
selectSpaceAdapter
=
new
SelectSpaceAdapter
(
space
->
spaceSelected
(
space
));
selectSpaceAdapter
.
submitList
(
spaces
);
dataBinding
.
rvSpaceOption
.
setLayoutManager
(
new
GridLayoutManager
(
this
,
3
));
dataBinding
.
rvSpaceOption
.
setAdapter
(
selectSpaceAdapter
);
t02SelectSpaceViewModel
.
updateCurrentRoad
(
null
);
eventBinding
();
resultLauncherRegister
();
observeBinding
();
}
private
void
eventBinding
(){
dataBinding
.
btnSelectSpaceBack
.
setOnClickListener
(
view
->
spaceSelected
(
null
));
dataBinding
.
btnSelectRoad
.
setOnClickListener
(
view
->
btnSelectRoadOnClicked
());
}
private
void
resultLauncherRegister
()
{
roadResultLauncher
=
registerForActivityResult
(
new
ActivityResultContracts
.
StartActivityForResult
(),
result
->
{
if
(
result
.
getResultCode
()
==
RESULT_OK
&&
result
.
getData
()
!=
null
){
Road
selectedRoad
=
result
.
getData
().
getParcelableExtra
(
"Road"
);
if
(
selectedRoad
!=
null
){
t02SelectSpaceViewModel
.
updateCurrentRoad
(
selectedRoad
);
}
}
});
}
private
void
observeBinding
(){
t02SelectSpaceViewModel
.
getCurrentRoad
().
observe
(
this
,
road
->
{
String
roadString
=
""
;
if
(
road
!=
null
){
roadString
=
road
.
id
+
" "
+
road
.
name
;
}
dataBinding
.
btnSelectRoad
.
setText
(
roadString
);
});
t02SelectSpaceViewModel
.
getCurrentSpace
().
observe
(
this
,
spaces
->
{
selectSpaceAdapter
.
submitList
(
spaces
);});
}
private
void
spaceSelected
(
Space
space
){
...
...
@@ -50,4 +85,10 @@ public class T02SelectSpaceActivity extends AppCompatActivity {
}
finish
();
}
private
void
btnSelectRoadOnClicked
(){
Intent
intent
=
new
Intent
();
intent
.
setClass
(
this
,
T02SelectRoadActivity
.
class
);
roadResultLauncher
.
launch
(
intent
);
}
}
\ No newline at end of file
app/src/main/java/ecom/android/newparkapp/view/T02SelectVehicleTypeActivity.java
View file @
fdd4860a
...
...
@@ -14,22 +14,24 @@ import ecom.android.newparkapp.R;
import
ecom.android.newparkapp.adapter.SelectVehicleTypeAdapter
;
import
ecom.android.newparkapp.databinding.ActivityT02SelectVehicleTypeBinding
;
import
ecom.android.newparkapp.entity.VehicleType
;
import
ecom.android.newparkapp.repository.InfoRepository
;
public
class
T02SelectVehicleTypeActivity
extends
AppCompatActivity
{
private
ActivityT02SelectVehicleTypeBinding
dataBinding
;
private
SelectVehicleTypeAdapter
selectVehicleTypeAdapter
;
private
List
<
VehicleType
>
vehicleTypeList
;
private
InfoRepository
infoRepository
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
dataBinding
=
DataBindingUtil
.
setContentView
(
this
,
R
.
layout
.
activity_t02_select_vehicle_type
);
vehicleTypeList
=
getIntent
().
getParcelableArrayListExtra
(
"VehicleTypeList"
);
infoRepository
=
new
InfoRepository
(
getApplication
());
selectVehicleTypeAdapter
=
new
SelectVehicleTypeAdapter
(
vehicleType
->
vehicleTypeSelected
(
vehicleType
));
selectVehicleTypeAdapter
.
submitList
(
vehicleTypeList
);
infoRepository
.
vehicleTypeDao
.
getAllLiveData
().
observe
(
this
,
vehicleTypes
->
{
selectVehicleTypeAdapter
.
submitList
(
vehicleTypes
);});
dataBinding
.
rvSelectOption
.
setLayoutManager
(
new
GridLayoutManager
(
this
,
2
));
dataBinding
.
rvSelectOption
.
setAdapter
(
selectVehicleTypeAdapter
);
...
...
app/src/main/java/ecom/android/newparkapp/view/T02StartActivity.java
View file @
fdd4860a
...
...
@@ -35,9 +35,6 @@ public class T02StartActivity extends AppCompatActivity {
private
ActivityResultLauncher
vehicleTypeResultLauncher
;
private
ActivityResultLauncher
spaceResultLauncher
;
private
List
<
VehicleType
>
vehicleTypes
;
private
List
<
Road
>
roads
;
private
List
<
Space
>
spaces
;
private
User
currentUser
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
...
...
@@ -86,26 +83,14 @@ public class T02StartActivity extends AppCompatActivity {
}
private
void
observeBinding
(){
t02StartViewModel
.
getVehicleTypes
().
observe
(
this
,
vehicleTypes
->
{
this
.
vehicleTypes
=
vehicleTypes
;});
t02StartViewModel
.
getRoads
().
observe
(
this
,
roads
->
{
this
.
roads
=
roads
;});
t02StartViewModel
.
getSpaces
().
observe
(
this
,
spaces
->
{
this
.
spaces
=
spaces
;});
}
}
private
void
btnParkingSpaceOnClicked
(){
Intent
intent
=
new
Intent
();
Bundle
bundle
=
new
Bundle
();
intent
.
setClass
(
this
,
T02SelectSpaceActivity
.
class
);
if
(
roads
==
null
||
spaces
==
null
){
Toast
.
makeText
(
this
,
"請先匯入道路及車格資料"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
}
bundle
.
putParcelableArrayList
(
"RoadList"
,
new
ArrayList
<>(
roads
));
bundle
.
putParcelableArrayList
(
"SpaceList"
,
new
ArrayList
<>(
spaces
));
intent
.
putExtras
(
bundle
);
spaceResultLauncher
.
launch
(
intent
);
...
...
@@ -115,11 +100,6 @@ public class T02StartActivity extends AppCompatActivity {
Intent
intent
=
new
Intent
();
Bundle
bundle
=
new
Bundle
();
intent
.
setClass
(
this
,
T02SelectVehicleTypeActivity
.
class
);
if
(
vehicleTypes
==
null
){
Toast
.
makeText
(
this
,
"請先匯入車種資料"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
}
bundle
.
putParcelableArrayList
(
"VehicleTypeList"
,
new
ArrayList
<>(
vehicleTypes
));
intent
.
putExtras
(
bundle
);
vehicleTypeResultLauncher
.
launch
(
intent
);
}
...
...
app/src/main/java/ecom/android/newparkapp/viewModel/T02SelectSpaceViewModel.java
View file @
fdd4860a
...
...
@@ -5,14 +5,44 @@ import android.icu.text.IDNA;
import
androidx.annotation.NonNull
;
import
androidx.lifecycle.AndroidViewModel
;
import
androidx.lifecycle.LiveData
;
import
androidx.lifecycle.MediatorLiveData
;
import
androidx.lifecycle.MutableLiveData
;
import
java.lang.invoke.MutableCallSite
;
import
java.util.List
;
import
ecom.android.newparkapp.entity.Road
;
import
ecom.android.newparkapp.entity.Space
;
import
ecom.android.newparkapp.repository.InfoRepository
;
public
class
T02SelectSpaceViewModel
extends
AndroidViewModel
{
private
InfoRepository
infoRepository
;
private
LiveData
<
List
<
Space
>>
spaces
;
private
LiveData
<
List
<
Road
>>
roads
;
private
MutableLiveData
<
Road
>
currentRoad
=
new
MutableLiveData
<>();
private
MutableLiveData
<
List
<
Space
>>
currentSpace
=
new
MutableLiveData
<>();
public
T02SelectSpaceViewModel
(
@NonNull
Application
application
)
{
super
(
application
);
infoRepository
=
new
InfoRepository
(
application
);
spaces
=
infoRepository
.
spaceDao
.
getAllLiveData
();
roads
=
infoRepository
.
roadDao
.
getAllLiveData
();
}
public
LiveData
<
List
<
Space
>>
getSpaces
(){
return
spaces
;}
public
LiveData
<
List
<
Road
>>
getRoads
(){
return
roads
;}
public
void
updateCurrentRoad
(
Road
road
){
if
(
road
==
null
){
currentRoad
.
setValue
(
null
);
currentSpace
.
setValue
(
infoRepository
.
spaceDao
.
getAll
());
}
else
{
currentRoad
.
setValue
(
road
);
currentSpace
.
setValue
(
infoRepository
.
spaceDao
.
loadAllByRoadId
(
road
.
id
));
}
}
public
LiveData
<
Road
>
getCurrentRoad
(){
return
currentRoad
;}
public
LiveData
<
List
<
Space
>>
getCurrentSpace
(){
return
currentSpace
;}
}
app/src/main/res/layout/activity_t02_select_road.xml
0 → 100644
View file @
fdd4860a
<?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"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
android:orientation=
"horizontal"
android:paddingStart=
"0dp"
android:paddingEnd=
"5dp"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"0.25"
android:gravity=
"center|center_vertical"
android:text=
"路段"
android:textSize=
"30sp"
/>
<Button
android:id=
"@+id/btn_select_road_back"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"0.75"
android:text=
"@string/label_back"
android:textSize=
"30sp"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_road_option"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"0.1"
tools:listitem=
"@layout/recycler_view_road_item"
tools:spanCount=
"2"
tools:layoutManager=
"GridLayoutManager"
/>
</LinearLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_t02_start.xml
View file @
fdd4860a
...
...
@@ -5,6 +5,10 @@
<data>
<import
type=
"ecom.android.newparkapp.entity.VehicleType"
/>
<import
type=
"ecom.android.newparkapp.entity.Space"
/>
<import
type=
"ecom.android.newparkapp.entity.Road"
/>
<import
type=
"ecom.android.newparkapp.entity.SpaceStatus"
/>
<import
type=
"ecom.android.newparkapp.entity.SpaceRate"
/>
<import
type=
"ecom.android.newparkapp.entity.SpaceType"
/>
<variable
name=
"t02StartViewModel"
type=
"ecom.android.newparkapp.viewModel.T02StartViewModel"
/>
...
...
@@ -200,7 +204,7 @@ tools:layout_editor_absoluteY="25dp">
android:layout_weight=
"0.17"
android:gravity=
"center"
android:textSize=
"21sp"
android:text=
"@{t02StartViewModel.currentCase.road.name}"
/>
android:text=
"@{t02StartViewModel.currentCase.
space.
road.name}"
/>
</LinearLayout>
<LinearLayout
...
...
app/src/main/res/layout/content_t02_select_road.xml
0 → 100644
View file @
fdd4860a
<?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"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
>
<fragment
android:id=
"@+id/nav_host_fragment_content_t02_select_road"
android:name=
"androidx.navigation.fragment.NavHostFragment"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
app:defaultNavHost=
"true"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:navGraph=
"@navigation/nav_graph"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_first.xml
0 → 100644
View file @
fdd4860a
<?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:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".FirstFragment"
>
<TextView
android:id=
"@+id/textview_first"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/hello_first_fragment"
app:layout_constraintBottom_toTopOf=
"@id/button_first"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<Button
android:id=
"@+id/button_first"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/next"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/textview_first"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_second.xml
0 → 100644
View file @
fdd4860a
<?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:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".SecondFragment"
>
<TextView
android:id=
"@+id/textview_second"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:layout_constraintBottom_toTopOf=
"@id/button_second"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<Button
android:id=
"@+id/button_second"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/previous"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/textview_second"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/recycler_view_road_item.xml
0 → 100644
View file @
fdd4860a
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<Button
android:id=
"@+id/btn_select_road"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"C876"
android:textSize=
"20dp"
>
</Button>
</layout>
\ No newline at end of file
app/src/main/res/navigation/nav_graph.xml
0 → 100644
View file @
fdd4860a
<?xml version="1.0" encoding="utf-8"?>
<navigation
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/nav_graph"
app:startDestination=
"@id/FirstFragment"
>
<fragment
android:id=
"@+id/FirstFragment"
android:name=
"ecom.android.newparkapp.FirstFragment"
android:label=
"@string/first_fragment_label"
tools:layout=
"@layout/fragment_first"
>
<action
android:id=
"@+id/action_FirstFragment_to_SecondFragment"
app:destination=
"@id/SecondFragment"
/>
</fragment>
<fragment
android:id=
"@+id/SecondFragment"
android:name=
"ecom.android.newparkapp.SecondFragment"
android:label=
"@string/second_fragment_label"
tools:layout=
"@layout/fragment_second"
>
<action
android:id=
"@+id/action_SecondFragment_to_FirstFragment"
app:destination=
"@id/FirstFragment"
/>
</fragment>
</navigation>
\ No newline at end of file
app/src/main/res/values-land/dimens.xml
0 → 100644
View file @
fdd4860a
<resources>
<dimen
name=
"fab_margin"
>
48dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values-w1240dp/dimens.xml
0 → 100644
View file @
fdd4860a
<resources>
<dimen
name=
"fab_margin"
>
200dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values-w600dp/dimens.xml
0 → 100644
View file @
fdd4860a
<resources>
<dimen
name=
"fab_margin"
>
48dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values/dimens.xml
0 → 100644
View file @
fdd4860a
<resources>
<dimen
name=
"fab_margin"
>
16dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
fdd4860a
...
...
@@ -69,4 +69,13 @@
<string
name=
"label_connect_success"
>
"%s 連接成功!"
</string>
<string
name=
"label_connect_failed"
>
"%s 連接失敗……"
</string>
<string
name=
"no_plate_message"
>
偵測不到車牌
</string>
<string
name=
"title_activity_t02_select_road"
>
T02SelectRoadActivity
</string>
<!-- Strings used for fragments for navigation -->
<string
name=
"first_fragment_label"
>
First Fragment
</string>
<string
name=
"second_fragment_label"
>
Second Fragment
</string>
<string
name=
"next"
>
Next
</string>
<string
name=
"previous"
>
Previous
</string>
<string
name=
"hello_first_fragment"
>
Hello first fragment
</string>
<string
name=
"hello_second_fragment"
>
Hello second fragment. Arg: %1$s
</string>
</resources>
\ No newline at end of file
app/src/main/res/values/themes.xml
View file @
fdd4860a
...
...
@@ -13,4 +13,13 @@
<item
name=
"android:statusBarColor"
tools:targetApi=
"l"
>
?attr/colorPrimaryVariant
</item>
<!-- Customize your theme here. -->
</style>
<style
name=
"NoActionBar"
>
<item
name=
"windowActionBar"
>
false
</item>
<item
name=
"windowNoTitle"
>
true
</item>
</style>
<style
name=
"AppBarOverlay"
parent=
"ThemeOverlay.AppCompat.Dark.ActionBar"
/>
<style
name=
"PopupOverlay"
parent=
"ThemeOverlay.AppCompat.Light"
/>
</resources>
\ No newline at end of file
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