Commit 8cf2d821 authored by YONG-LIN SU's avatar YONG-LIN SU

移植車牌輸入功能

parent be9849d8
......@@ -6,6 +6,7 @@
<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_key_in_plate_number.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" />
......
......@@ -27,6 +27,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
tools:targetApi="31">
<activity
android:name=".view.T02KeyInPlateNumberActivity"
android:exported="false" />
<activity
android:name=".view.T02SelectRoadActivity"
android:exported="false" />
......
......@@ -586,4 +586,76 @@ public class Common {
img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
return img;
}
public static boolean plateRuleCheck(String plateNumber) {
boolean isLegal = true;
// 空字串處理
if (plateNumber == null || plateNumber.length() == 0 || plateNumber.trim().isEmpty() || plateNumber.length() > 7){
isLegal = false;
}
return isLegal;
}
public static String plateModifyByRule(String plateNumber){
if (plateNumber.length() <= 7 ){
int dashIndex = plateNumber.indexOf("-");
if (dashIndex == -1){
return plateNumber;
}
boolean flag = false;
int asciiA = 'A';
int asciiZ = 'Z';
if (dashIndex == 2 || dashIndex == 3){
for (int i = 0 ; i < dashIndex; i++){
int c = plateNumber.charAt(i);
if (c >= asciiA && c <= asciiZ ){
flag = true;
break;
}
}
if (flag){
for (int i = 0; i < dashIndex; i ++){
if (plateNumber.charAt(i) == '1'){
String newPlateNumber = plateNumber.substring(0, i) + "I" + plateNumber.substring(i+1);
plateNumber = newPlateNumber;
}
if (plateNumber.charAt(i) == '0'){
String newPlateNumber = plateNumber.substring(0, i) + "O" + plateNumber.substring(i+1);
plateNumber = newPlateNumber;
}
}
}
}
if (dashIndex > 3){
for (int i = dashIndex +1 ; i < plateNumber.length(); i++){
int c = plateNumber.charAt(i);
if (c >= asciiA && c <= asciiZ ){
flag = true;
break;
}
}
if (flag){
for (int i = dashIndex +1 ; i < plateNumber.length(); i++){
if (plateNumber.charAt(i) == '1'){
String newPlateNumber = plateNumber.substring(0, i) + "I" + plateNumber.substring(i+1);
plateNumber = newPlateNumber;
}
if (plateNumber.charAt(i) == '0'){
String newPlateNumber = plateNumber.substring(0, i) + "O" + plateNumber.substring(i+1);
plateNumber = newPlateNumber;
}
}
}
}
}else {
String newPlateNumber = plateNumber.substring(0,7);
return plateModifyByRule(newPlateNumber);
}
return plateNumber;
}
}
package ecom.android.newparkapp.view;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import android.content.Intent;
import android.os.Bundle;
import ecom.android.newparkapp.Common;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.databinding.ActivityT02KeyInPlateNumberBinding;
public class T02KeyInPlateNumberActivity extends AppCompatActivity {
private ActivityT02KeyInPlateNumberBinding dataBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_t02_key_in_plate_number);
eventBinding();
}
private void eventBinding() {
dataBinding.btn0.setOnClickListener(view -> keyIn("0"));
dataBinding.btn1.setOnClickListener(view -> keyIn("1"));
dataBinding.btn2.setOnClickListener(view -> keyIn("2"));
dataBinding.btn3.setOnClickListener(view -> keyIn("3"));
dataBinding.btn4.setOnClickListener(view -> keyIn("4"));
dataBinding.btn5.setOnClickListener(view -> keyIn("5"));
dataBinding.btn6.setOnClickListener(view -> keyIn("6"));
dataBinding.btn7.setOnClickListener(view -> keyIn("7"));
dataBinding.btn8.setOnClickListener(view -> keyIn("8"));
dataBinding.btn9.setOnClickListener(view -> keyIn("9"));
dataBinding.btnA.setOnClickListener(view -> keyIn("A"));
dataBinding.btnB.setOnClickListener(view -> keyIn("B"));
dataBinding.btnC.setOnClickListener(view -> keyIn("C"));
dataBinding.btnD.setOnClickListener(view -> keyIn("D"));
dataBinding.btnE.setOnClickListener(view -> keyIn("E"));
dataBinding.btnF.setOnClickListener(view -> keyIn("F"));
dataBinding.btnG.setOnClickListener(view -> keyIn("G"));
dataBinding.btnH.setOnClickListener(view -> keyIn("H"));
dataBinding.btnI.setOnClickListener(view -> keyIn("I"));
dataBinding.btnJ.setOnClickListener(view -> keyIn("J"));
dataBinding.btnK.setOnClickListener(view -> keyIn("K"));
dataBinding.btnL.setOnClickListener(view -> keyIn("L"));
dataBinding.btnM.setOnClickListener(view -> keyIn("M"));
dataBinding.btnN.setOnClickListener(view -> keyIn("N"));
dataBinding.btnO.setOnClickListener(view -> keyIn("O"));
dataBinding.btnP.setOnClickListener(view -> keyIn("P"));
dataBinding.btnQ.setOnClickListener(view -> keyIn("Q"));
dataBinding.btnR.setOnClickListener(view -> keyIn("R"));
dataBinding.btnS.setOnClickListener(view -> keyIn("S"));
dataBinding.btnT.setOnClickListener(view -> keyIn("T"));
dataBinding.btnU.setOnClickListener(view -> keyIn("U"));
dataBinding.btnV.setOnClickListener(view -> keyIn("V"));
dataBinding.btnW.setOnClickListener(view -> keyIn("W"));
dataBinding.btnX.setOnClickListener(view -> keyIn("X"));
dataBinding.btnY.setOnClickListener(view -> keyIn("Y"));
dataBinding.btnZ.setOnClickListener(view -> keyIn("Z"));
dataBinding.btnDash.setOnClickListener(view -> keyIn("-"));
dataBinding.btnArmyPltno.setOnClickListener(view -> KeyInSpecial("軍"));
dataBinding.btnTempPltno.setOnClickListener(view -> KeyInSpecial("臨"));
dataBinding.btnDelete.setOnClickListener(view -> backSpace());
dataBinding.btnInputConfirm.setOnClickListener(view -> confirm());
}
private void keyIn(String word){
String newPlateNumber = dataBinding.editText.getText().toString() + word;
if (Common.plateRuleCheck(newPlateNumber)){
dataBinding.editText.setText(newPlateNumber);
}
}
private void KeyInSpecial(String word){
String currentSpecialString = dataBinding.isSpecial.getText().toString();
switch (word){
case "軍":
if (currentSpecialString.equals("軍")){
dataBinding.isSpecial.setText("");
}else {
dataBinding.isSpecial.setText("軍");
}
break;
case "臨":
if (currentSpecialString.equals("臨")){
dataBinding.isSpecial.setText("");
}else {
dataBinding.isSpecial.setText("臨");
}
break;
default:
break;
}
}
private void backSpace(){
String currentPlateNumber = dataBinding.editText.getText().toString();
if (currentPlateNumber.length() > 0){
String newPlateNumber = currentPlateNumber.substring(0, currentPlateNumber.length() - 1);
dataBinding.editText.setText(newPlateNumber);
}
}
private void confirm(){
Intent intent = getIntent();
intent.putExtra("PlateNumber", dataBinding.editText.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
}
\ No newline at end of file
......@@ -34,6 +34,7 @@ public class T02StartActivity extends AppCompatActivity {
private ActivityResultLauncher vehicleTypeResultLauncher;
private ActivityResultLauncher spaceResultLauncher;
private ActivityResultLauncher plateNumberResultLauncher;
private User currentUser;
@Override
......@@ -60,6 +61,8 @@ public class T02StartActivity extends AppCompatActivity {
dataBinding.btnParkingSpace.setOnClickListener(v -> btnParkingSpaceOnClicked());
dataBinding.btnVehicleType.setOnClickListener(v -> btnVehicleTypeOnClicked());
dataBinding.btnTimeNow.setOnClickListener(v -> btnTimeNowOnClicked());
dataBinding.btnPlateNumber.setOnClickListener(v-> btnPlateNumberOnClicked());
dataBinding.btnStartBack.setOnClickListener(v -> {finish();});
}
private void resultLauncherRegister(){
......@@ -80,13 +83,19 @@ public class T02StartActivity extends AppCompatActivity {
t02StartViewModel.setSpace(selectedSpace);
}
});
plateNumberResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null){
String plateNumber = result.getData().getStringExtra("PlateNumber");
t02StartViewModel.setPlateNumber(plateNumber);
}
});
}
private void observeBinding(){
}
private void btnParkingSpaceOnClicked(){
Intent intent = new Intent();
Bundle bundle = new Bundle();
......@@ -118,4 +127,10 @@ public class T02StartActivity extends AppCompatActivity {
builder.create().show();
}
private void btnPlateNumberOnClicked(){
Intent intent = new Intent();
intent.setClass(this, T02KeyInPlateNumberActivity.class);
plateNumberResultLauncher.launch(intent);
}
}
\ No newline at end of file
......@@ -72,6 +72,12 @@ public class T02StartViewModel extends AndroidViewModel {
currentCase.setValue(tempCase);
}
public void setPlateNumber(String plateNumber) {
Case tempCase = currentCase.getValue();
tempCase.plateNumber = plateNumber;
currentCase.setValue(tempCase);
}
public void initCurrentCase(){
currentCase.setValue(newCase());
}
......@@ -170,4 +176,6 @@ public class T02StartViewModel extends AndroidViewModel {
++nIdx;
Common.updateTXT(getApplication(), szPath, "00", String.valueOf(nIdx));
}
}
This diff is collapsed.
......@@ -126,7 +126,6 @@ tools:layout_editor_absoluteY="25dp">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.87"
android:onClick="startBackOnck"
android:text="@string/label_back"
android:textSize="20sp" />
</LinearLayout>
......
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