Commit 74f29d79 authored by Bruce's avatar Bruce

參數設定頁面 & 使用者清單選擇 ok

parent ab6b58be
......@@ -3,6 +3,22 @@
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_main.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t01_bulletin_board.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t01_import_db.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t01_setting_layout.xml" value="0.3614457831325301" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t02_select_space.xml" value="0.22" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t02_select_user.xml" value="0.29257246376811596" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/activity_t02_select_vehicle_type.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/content_activity_t02_select_user.xml" value="0.29257246376811596" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/fragment_first.xml" value="0.29257246376811596" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/fragment_second.xml" value="0.29257246376811596" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/fragment_t02_select_user.xml" value="0.33" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/recycler_view_bulletin_board_item.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/recycler_view_db_table_item.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/recycler_view_space_item.xml" value="0.14947916666666666" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/recycler_view_user_item.xml" value="0.18645833333333334" />
<entry key="..\:/AndroidStudioProject/newparkapp/app/src/main/res/layout/recycler_view_vehicle_type_item.xml" value="0.14947916666666666" />
<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" />
......@@ -23,7 +39,7 @@
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -63,6 +63,9 @@
<activity
android:name=".view.T02SelectSpaceActivity"
android:exported="false" />
<activity
android:name=".view.T02SelectUserActivity"
android:exported="false" />
<provider
......
package ecom.android.newparkapp.adapter;
import android.view.LayoutInflater;
import android.view.View;
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.RecyclerViewUserItemBinding;
import ecom.android.newparkapp.databinding.RecyclerViewVehicleTypeItemBinding;
import ecom.android.newparkapp.entity.User;
import ecom.android.newparkapp.entity.VehicleType;
public class SelectUserAdapter extends ListAdapter<User, SelectUserAdapter.SelectUserViewHolder> {
final private OnItemClickListener onItemClickListener;
public SelectUserAdapter(OnItemClickListener onItemClickListener) {
super(userItemCallback);
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public SelectUserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
RecyclerViewUserItemBinding recyclerViewUserItemBinding = RecyclerViewUserItemBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false);
return new SelectUserAdapter.SelectUserViewHolder(recyclerViewUserItemBinding);
}
@Override
public void onBindViewHolder(@NonNull SelectUserViewHolder holder, int position) {
holder.setBinding(getItem(position), this.onItemClickListener);
}
public static final DiffUtil.ItemCallback<User> userItemCallback = new DiffUtil.ItemCallback<User>() {
@Override
public boolean areItemsTheSame(@NonNull User oldItem, @NonNull User newItem) {
return oldItem.id == newItem.id;
}
@Override
public boolean areContentsTheSame(@NonNull User oldItem, @NonNull User newItem) {
return oldItem.name.equals(newItem.name);
}
};
static class SelectUserViewHolder extends RecyclerView.ViewHolder {
private final RecyclerViewUserItemBinding dataBinding;
SelectUserViewHolder(RecyclerViewUserItemBinding dataBinding) {
super(dataBinding.getRoot());
this.dataBinding = dataBinding;
}
void setBinding(User user, OnItemClickListener onItemClickListener){
String btnText = user.id + " " + user.name;
dataBinding.btnSelectUser.setText(btnText);
dataBinding.btnSelectUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onUserClick(user);
}
});
}
}
public interface OnItemClickListener {
void onUserClick(User user);
}
}
......@@ -8,15 +8,24 @@ import android.text.TextWatcher;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;
import androidx.preference.PreferenceFragmentCompat;
import java.util.ArrayList;
import java.util.List;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.databinding.ActivityT01SettingLayoutBinding;
import ecom.android.newparkapp.entity.User;
import ecom.android.newparkapp.entity.VehicleType;
import ecom.android.newparkapp.viewModel.T01SettingViewModel;
import ecom.android.newparkapp.viewModel.UserViewModel;
public class T01SettingActivity extends AppCompatActivity {
......@@ -24,6 +33,9 @@ public class T01SettingActivity extends AppCompatActivity {
private ActivityT01SettingLayoutBinding dataBinding;
private ViewModelProvider viewModelProvider;
private T01SettingViewModel t01SettingViewModel;
private ActivityResultLauncher UserResultLauncher;
private List<User> Users;
private UserViewModel userViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -33,6 +45,7 @@ public class T01SettingActivity extends AppCompatActivity {
viewModelProvider = new ViewModelProvider(this);
t01SettingViewModel = viewModelProvider.get(T01SettingViewModel.class);
userViewModel = viewModelProvider.get(UserViewModel.class);
dataBinding.setT01SettingViewModel(t01SettingViewModel);
ActionBar actionBar = getSupportActionBar();
......@@ -42,9 +55,17 @@ public class T01SettingActivity extends AppCompatActivity {
}
setListeners();
resultLauncherRegister();
observeBinding();
}
// public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
protected void onPause() {
super.onPause();
t01SettingViewModel.savePrefs();
userViewModel.setCurrentUser(t01SettingViewModel.getCurrentUser());
}
// public static class SettingsFragment extends PreferenceFragmentCompat {
// @Override
// public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
// setPreferencesFromResource(R.xml.root_preferences, rootKey);
......@@ -57,23 +78,45 @@ public class T01SettingActivity extends AppCompatActivity {
dataBinding.importDataButton.setOnClickListener(importData);
dataBinding.advancedButton.setOnClickListener(advancedOption);
dataBinding.setUploadAddButton.setOnClickListener(TimeAdd);
dataBinding.setUploadSubButton.setOnClickListener(TimeSub);
dataBinding.setGpsAddButton.setOnClickListener(GpsTimeAdd);
dataBinding.setGpsSubButton.setOnClickListener(GpsTimeSub);
dataBinding.setFtpPortEditText.addTextChangedListener(PortTextWatcher);
}
private void observeBinding() {
t01SettingViewModel.getUsers().observe(this, Users -> {
this.Users = Users;
});
}
private void resultLauncherRegister() {
UserResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
User selectedUser = result.getData().getParcelableExtra("User");
Toast.makeText(this, selectedUser.id + " " + selectedUser.name, Toast.LENGTH_SHORT).show();
t01SettingViewModel.setUser(selectedUser.id,selectedUser.name);
}
});
}
private final Button.OnClickListener selectUser = v -> {
Toast.makeText(T01SettingActivity.this, "尚未實作使用者設定", Toast.LENGTH_LONG).show();
Intent intent = new Intent();
Bundle bundle = new Bundle();
intent.setClass(this, T02SelectUserActivity.class);
if (Users == null){
Toast.makeText(this, "請先匯入使用者", Toast.LENGTH_SHORT).show();
return;
}
bundle.putParcelableArrayList("UserList", new ArrayList<>(Users));
intent.putExtras(bundle);
UserResultLauncher.launch(intent);
//Toast.makeText(T01SettingActivity.this, "尚未實作使用者設定", Toast.LENGTH_LONG).show();
};
private final Button.OnClickListener SaveSetting = v -> {
Toast.makeText(T01SettingActivity.this, String.format("FTP:%s \n AutoNext:%s \n port:%s",
t01SettingViewModel.get_ftp_ip(),
t01SettingViewModel.get_autoNext(),
t01SettingViewModel.get_ftp_port()),
Toast.LENGTH_LONG).show();
t01SettingViewModel.savePrefs();
Toast.makeText(this, "設定保存成功,GPS設定將在下次開單時生效", Toast.LENGTH_LONG).show();
};
private final Button.OnClickListener advancedOption = v -> {
......
package ecom.android.newparkapp.view;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.GridLayoutManager;
import java.util.List;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.adapter.SelectUserAdapter;
import ecom.android.newparkapp.adapter.SelectVehicleTypeAdapter;
import ecom.android.newparkapp.databinding.ActivityT02SelectUserBinding;
import ecom.android.newparkapp.databinding.ActivityT02SelectVehicleTypeBinding;
import ecom.android.newparkapp.entity.User;
import ecom.android.newparkapp.entity.VehicleType;
public class T02SelectUserActivity extends AppCompatActivity {
private ActivityT02SelectUserBinding dataBinding;
private SelectUserAdapter selectUserAdapter;
private List<User> UserList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_t02_select_user);
UserList = getIntent().getParcelableArrayListExtra("UserList");
selectUserAdapter = new SelectUserAdapter(user -> userSelected(user));
selectUserAdapter.submitList(UserList);
dataBinding.rvSelectOption.setLayoutManager(new GridLayoutManager(this,2));
dataBinding.rvSelectOption.setAdapter(selectUserAdapter);
dataBinding.btnSelectBack.setOnClickListener(view -> userSelected(null));
}
private void userSelected(User user){
if (user == null){
setResult(RESULT_CANCELED);
}else {
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putParcelable("User",user);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
}
finish();
}
}
\ No newline at end of file
......@@ -9,8 +9,11 @@ import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import java.util.List;
import java.util.Locale;
......@@ -31,6 +34,9 @@ public class T01SettingViewModel extends AndroidViewModel {
private User mUser;
private SharedPreferences settings;
private LiveData<List<User>> Users;
private InfoRepository infoRepository;
public T01SettingViewModel(@NonNull Application application) {
super(application);
tempPREF = new PreferenceSettings();
......@@ -38,6 +44,9 @@ public class T01SettingViewModel extends AndroidViewModel {
restorePrefs(application, tempPREF);
PREF.setValue(tempPREF);
infoRepository = new InfoRepository(application);
Users = infoRepository.userDao.getAllLiveData();
}
private void restorePrefs(@NonNull Application application,PreferenceSettings PREF) {
......@@ -83,6 +92,22 @@ public class T01SettingViewModel extends AndroidViewModel {
//autoDeduction_switch.setChecked(pref_autoDeduction);
}
public void savePrefs(){
tempPREF = PREF.getValue();
settings.edit().putString(Common.PREF_USER, mUser.getCombineInfo()).apply();
settings.edit().putString(Common.PREF_FTP_ADDR, tempPREF.pref_FtpAddr).apply();
settings.edit().putInt(Common.PREF_FTP_PORT, tempPREF.pref_FtpPort).apply();
settings.edit().putString(Common.PREF_FTP_USER, tempPREF.pref_FtpUser).apply();
settings.edit().putString(Common.PREF_FTP_PSW, tempPREF.pref_FtpPsw).apply();
settings.edit().putInt(Common.PREF_UPLOAD_T, tempPREF.pref_UploadT).apply();
settings.edit().putInt(Common.PREF_GPS_TIME, tempPREF.pref_GpsTime).apply();
settings.edit().putBoolean(Common.PREF_AUTO_NEXT, tempPREF.pref_autoNext).apply();
settings.edit().putBoolean(Common.PREF_USUAL_OPTION, tempPREF.pref_usualOption).apply();
settings.edit().putBoolean(Common.PREF_NEARBY_LOCATION, tempPREF.pref_nearbyLocation).apply();
settings.edit().putBoolean(Common.PREF_PRINT_AND_CAMERA, tempPREF.pref_printAndCamera).apply();
settings.edit().putBoolean(Common.PREF_KEYBOARD_REV, tempPREF.pref_keyboardrev).apply();
settings.edit().putBoolean(Common.PREF_AUTO_DEDUCTION, tempPREF.pref_autoDeduction).apply();
}
/* PREF get set 操作
......@@ -104,6 +129,11 @@ public class T01SettingViewModel extends AndroidViewModel {
PREF.setValue(tempPREF);
}
public void set_pref_user(String userInfo){
tempPREF.pref_user = userInfo;
PREF.setValue(tempPREF);
}
public String get_ftp_ip(){
return PREF.getValue().pref_FtpAddr;
}
......@@ -114,4 +144,16 @@ public class T01SettingViewModel extends AndroidViewModel {
public String get_ftp_port(){
return String.valueOf(PREF.getValue().pref_FtpPort);
}
/* User get set 操作
*/
public void setUser(int id,String name){
mUser = new User(id, name);
set_pref_user(mUser.getCombineInfo());
}
public LiveData<List<User>> getUsers(){
return Users;
}
public User getCurrentUser(){return mUser;}
}
......@@ -38,6 +38,9 @@ public class UserViewModel extends AndroidViewModel {
User cUser = infoRepository.userDao.findByName("Root");
currentUser.setValue(cUser);
}
public void setCurrentUser(User cUser){
currentUser.setValue(cUser);
}
public LiveData<User> getUserLiveData(){return userLiveData;}
}
......@@ -253,8 +253,15 @@
android:layout_marginTop="5dp"
android:gravity="center"
android:text="保存"
android:visibility="invisible"
android:textSize="25sp" />
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="?android:attr/listDivider" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/autoNext_switch"
android:layout_width="match_parent"
......
<?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.T02SelectVehicleTypeActivity">
<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:id="@+id/tv_select_title"
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_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_select_option"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:padding="6dp"
app:layoutManager = "androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:spanCount="2"
tools:listitem="@layout/recycler_view_user_item" />
</LinearLayout>
</layout>
\ No newline at end of file
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/btn_select_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textSize="20dp"
/>
</layout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment