From da8d47f2b236521ff69b9c9172228938cb667750 Mon Sep 17 00:00:00 2001 From: icewithcola Date: Sat, 20 Jul 2024 23:30:49 +0800 Subject: [PATCH] Page 7 Stage 1 --- app/build.gradle.kts | 4 + app/src/main/AndroidManifest.xml | 7 +- .../java/chatgpt/AnimalDatabaseHelper.java | 1 + .../uk/kagurach/android101/KaBaseActivity.kt | 20 ++ .../uk/kagurach/android101/MainActivity.java | 3 +- .../uk/kagurach/android101/MainActivity2.java | 36 +-- .../java/uk/kagurach/android101/Page3.java | 1 - .../java/uk/kagurach/android101/Page4.java | 15 +- .../java/uk/kagurach/android101/Page5.java | 53 ++-- .../main/java/uk/kagurach/android101/Page6.kt | 92 +++++-- .../main/java/uk/kagurach/android101/Page7.kt | 205 ++++++++++++++-- .../uk/kagurach/android101/SettingPage.kt | 16 +- .../uk/kagurach/android101/SettingStorage.kt | 7 +- .../AbstractAutoCompleteHelper.java | 38 +-- .../AnimalTypeAutoCompleteHelper.java | 10 +- .../kagurach/android101/helper/ColorHelper.kt | 8 +- .../android101/helper/PageHelper.java | 3 +- .../android101/misc/AIAnswerService.kt | 4 +- .../uk/kagurach/android101/misc/Kaculate.kt | 8 +- .../vibrationBroadcastReceiver.java | 4 +- .../ui/dashboard/DashboardFragment.kt | 42 ---- .../ui/dashboard/DashboardViewModel.kt | 13 - .../android101/ui/home/HomeFragment.kt | 42 ---- .../android101/ui/home/HomeViewModel.kt | 13 - .../ui/notifications/NotificationsFragment.kt | 42 ---- .../notifications/NotificationsViewModel.kt | 13 - .../main/res/drawable/p7_result_layout.xml | 10 + app/src/main/res/layout/activity_page6.xml | 7 + app/src/main/res/layout/activity_page7.xml | 232 ++++++++++++++++-- .../main/res/layout/fragment_dashboard.xml | 22 -- app/src/main/res/layout/fragment_home.xml | 22 -- .../res/layout/fragment_notifications.xml | 22 -- app/src/main/res/menu/bottom_nav_menu.xml | 19 -- .../main/res/navigation/mobile_navigation.xml | 25 -- app/src/main/res/values-zh-rCN/strings.xml | 13 + app/src/main/res/values/strings.xml | 11 +- gradle/libs.versions.toml | 21 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 38 files changed, 631 insertions(+), 475 deletions(-) delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/dashboard/DashboardFragment.kt delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/dashboard/DashboardViewModel.kt delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/home/HomeFragment.kt delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/home/HomeViewModel.kt delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/notifications/NotificationsFragment.kt delete mode 100644 app/src/main/java/uk/kagurach/android101/ui/notifications/NotificationsViewModel.kt create mode 100644 app/src/main/res/drawable/p7_result_layout.xml delete mode 100644 app/src/main/res/layout/fragment_dashboard.xml delete mode 100644 app/src/main/res/layout/fragment_home.xml delete mode 100644 app/src/main/res/layout/fragment_notifications.xml delete mode 100644 app/src/main/res/menu/bottom_nav_menu.xml delete mode 100644 app/src/main/res/navigation/mobile_navigation.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 194be8a..d2901f3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -74,6 +74,7 @@ dependencies { implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.androidx.datastore.rxjava3) implementation(libs.androidx.datastore.preferences) + implementation(libs.androidx.work) testImplementation(libs.junit) @@ -85,4 +86,7 @@ dependencies { debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) + + implementation(libs.moshi) + implementation(libs.okhttp3) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5bfa0ae..3a22231 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + + android:supportsRtl="false" + android:theme="@style/Theme.Android101" + android:usesCleartextTraffic="true" + > (R.id.P2SettingPage) + if (fl != null) { + if (fl.visibility == View.VISIBLE) { + return super.dispatchTouchEvent(ev) + } + } + + val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0) + } + return super.dispatchTouchEvent(ev) + } } \ No newline at end of file diff --git a/app/src/main/java/uk/kagurach/android101/MainActivity.java b/app/src/main/java/uk/kagurach/android101/MainActivity.java index 96724b6..26fff29 100644 --- a/app/src/main/java/uk/kagurach/android101/MainActivity.java +++ b/app/src/main/java/uk/kagurach/android101/MainActivity.java @@ -16,7 +16,6 @@ import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.graphics.Insets; @@ -129,7 +128,7 @@ public class MainActivity extends KaBaseActivity { @Override public void onClick(View v) { - Intent intent = new Intent(v.getContext(),SettingPage.class); + Intent intent = new Intent(v.getContext(), SettingPage.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); diff --git a/app/src/main/java/uk/kagurach/android101/MainActivity2.java b/app/src/main/java/uk/kagurach/android101/MainActivity2.java index ca234f9..d18b5f5 100644 --- a/app/src/main/java/uk/kagurach/android101/MainActivity2.java +++ b/app/src/main/java/uk/kagurach/android101/MainActivity2.java @@ -5,7 +5,6 @@ import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.util.TypedValue; -import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; @@ -16,7 +15,6 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.activity.EdgeToEdge; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; @@ -30,7 +28,7 @@ public class MainActivity2 extends KaBaseActivity { PageHelper pageHelper; int _text_size = 70; - int _text_color = Color.rgb(0,0,0); + int _text_color = Color.rgb(0, 0, 0); String _text_unit = "sp"; @Override @@ -158,10 +156,10 @@ public class MainActivity2 extends KaBaseActivity { } - private void updateCurrentSettingShower(){ + private void updateCurrentSettingShower() { TextView tv = findViewById(R.id.P2SettingResult); String sb = "Color = " + - new ColorHelper().toString(_text_color,"#",false) + + new ColorHelper().toString(_text_color, "#", false) + "; TextSize = " + _text_size + "." + @@ -169,7 +167,7 @@ public class MainActivity2 extends KaBaseActivity { tv.setText(sb); } - class SettingButtonHandler implements View.OnClickListener{ + class SettingButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { FrameLayout fl = findViewById(R.id.P2SettingPage); @@ -182,7 +180,7 @@ public class MainActivity2 extends KaBaseActivity { } } - class CloseSettingButtonHandler implements View.OnClickListener{ + class CloseSettingButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { FrameLayout fl = findViewById(R.id.P2SettingPage); @@ -197,7 +195,7 @@ public class MainActivity2 extends KaBaseActivity { } } - class TestColorButtonHandler implements View.OnClickListener{ + class TestColorButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { ImageView imageView = findViewById(R.id.P2ColorShower); @@ -213,8 +211,8 @@ public class MainActivity2 extends KaBaseActivity { g_edit.getText().toString().isEmpty() || b_edit.getText().toString().isEmpty()) { ToastHelper.SmartToast.ShowToast(""" - Please input R,G,B within 0-255 - 请在大小选择下方输入0-255的RGB""", + Please input R,G,B within 0-255 + 请在大小选择下方输入0-255的RGB""", v.getContext()); } @@ -235,23 +233,5 @@ public class MainActivity2 extends KaBaseActivity { } } } - - // Fix: hide keyboard - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - if (getCurrentFocus() != null) { - // If the Setting float window shows, do nothing - FrameLayout fl = findViewById(R.id.P2SettingPage); - if (fl!=null){ - if (fl.getVisibility() == View.VISIBLE){ - return super.dispatchTouchEvent(ev); - } - } - - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); - } - return super.dispatchTouchEvent(ev); - } } diff --git a/app/src/main/java/uk/kagurach/android101/Page3.java b/app/src/main/java/uk/kagurach/android101/Page3.java index de9fac9..b953519 100644 --- a/app/src/main/java/uk/kagurach/android101/Page3.java +++ b/app/src/main/java/uk/kagurach/android101/Page3.java @@ -9,7 +9,6 @@ import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; diff --git a/app/src/main/java/uk/kagurach/android101/Page4.java b/app/src/main/java/uk/kagurach/android101/Page4.java index c890ec5..b9ab499 100644 --- a/app/src/main/java/uk/kagurach/android101/Page4.java +++ b/app/src/main/java/uk/kagurach/android101/Page4.java @@ -1,12 +1,9 @@ package uk.kagurach.android101; import android.content.ComponentName; -import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.MotionEvent; import android.view.View; -import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @@ -14,7 +11,6 @@ import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; @@ -80,15 +76,6 @@ public class Page4 extends KaBaseActivity { mLauncher.launch(intent); } - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - if (getCurrentFocus() != null) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); - } - return super.dispatchTouchEvent(ev); - } - private final class ButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { @@ -101,7 +88,7 @@ public class Page4 extends KaBaseActivity { public void onClick(View v) { String receivierPath = "uk.kagurach.android101.vibrationBroadcastReceiver.vibrationBroadcastReceiver"; Intent intent = new Intent(vibrationBroadcastReceiver.VIBRATION_ACTION_NAME); - ComponentName componentName = new ComponentName("uk.kagurach.android101",receivierPath); + ComponentName componentName = new ComponentName("uk.kagurach.android101", receivierPath); intent.setComponent(componentName); sendBroadcast(intent); } diff --git a/app/src/main/java/uk/kagurach/android101/Page5.java b/app/src/main/java/uk/kagurach/android101/Page5.java index 4f7563a..ff53f19 100644 --- a/app/src/main/java/uk/kagurach/android101/Page5.java +++ b/app/src/main/java/uk/kagurach/android101/Page5.java @@ -1,18 +1,14 @@ package uk.kagurach.android101; -import android.content.Context; import android.os.Bundle; import android.util.Log; -import android.view.MotionEvent; import android.view.View; -import android.view.inputmethod.InputMethodManager; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; import androidx.activity.EdgeToEdge; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; @@ -21,15 +17,16 @@ import java.io.IOException; import java.util.Objects; import chatgpt.AnimalDatabaseHelper; +import uk.kagurach.android101.helper.AutoCompleHelper.AnimalTypeAutoCompleteHelper; import uk.kagurach.android101.helper.PageHelper; import uk.kagurach.android101.helper.ToastHelper; -import uk.kagurach.android101.helper.AutoCompleHelper.AnimalTypeAutoCompleteHelper; public class Page5 extends KaBaseActivity { - AnimalTypeAutoCompleteHelper completeHelper = null; final AnimalDatabaseHelper dbHelper = new AnimalDatabaseHelper(this); + AnimalTypeAutoCompleteHelper completeHelper = null; PageHelper pageHelper; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -41,7 +38,7 @@ public class Page5 extends KaBaseActivity { return insets; }); - pageHelper = new PageHelper(this, Page4.class,Page6.class); + pageHelper = new PageHelper(this, Page4.class, Page6.class); // Set auto-suggestions for animals AutoCompleteTextView autoCompleteTextView = findViewById(R.id.AnimalTypeAutoCompleteInput); @@ -50,9 +47,9 @@ public class Page5 extends KaBaseActivity { completeHelper.Load(); autoCompleteTextView.setAdapter( completeHelper.GetArrayAdapter( - this,android.R.layout.simple_list_item_1 + this, android.R.layout.simple_list_item_1 )); - } catch (IOException e){ + } catch (IOException e) { Log.e("P5IOException", Objects.requireNonNull(e.getMessage())); } @@ -83,18 +80,18 @@ public class Page5 extends KaBaseActivity { String animal_name = name.getText().toString(); String animal_type = type.getText().toString(); - if (animal_name.isEmpty()||animal_type.isEmpty()){ - ToastHelper.SmartToast.ShowToast("Please input all fields",v.getContext()); + if (animal_name.isEmpty() || animal_type.isEmpty()) { + ToastHelper.SmartToast.ShowToast("Please input all fields", v.getContext()); return; } // Add to database - if (dbHelper.insertAnimalData(animal_name, animal_type.replace(" ","_"))) { + if (dbHelper.insertAnimalData(animal_name, animal_type.replace(" ", "_"))) { // Insert was successful - ToastHelper.SmartToast.ShowToast( "Animal added successfully!",v.getContext()); + ToastHelper.SmartToast.ShowToast("Animal added successfully!", v.getContext()); } else { // Name already exists - ToastHelper.SmartToast.ShowToast( "Animal with this name already exists!",v.getContext()); + ToastHelper.SmartToast.ShowToast("Animal with this name already exists!", v.getContext()); return; } try { @@ -109,9 +106,9 @@ public class Page5 extends KaBaseActivity { throw new RuntimeException(e); } type.setAdapter( - completeHelper.GetArrayAdapter( - v.getContext(),android.R.layout.simple_list_item_1 - )); + completeHelper.GetArrayAdapter( + v.getContext(), android.R.layout.simple_list_item_1 + )); } } @@ -126,18 +123,18 @@ public class Page5 extends KaBaseActivity { } _a.setAdapter( completeHelper.GetArrayAdapter( - v.getContext(),android.R.layout.simple_list_item_1 + v.getContext(), android.R.layout.simple_list_item_1 )); - ToastHelper.SmartToast.ShowToast("Cleaned Data",v.getContext()); + ToastHelper.SmartToast.ShowToast("Cleaned Data", v.getContext()); // Clean DataBase dbHelper.clearTable(); - ToastHelper.SmartToast.ShowToast("Cleaned Database",v.getContext()); + ToastHelper.SmartToast.ShowToast("Cleaned Database", v.getContext()); return true; } } - class P5CloseQueryButtonHandler implements View.OnClickListener{ + class P5CloseQueryButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { @@ -146,11 +143,11 @@ public class Page5 extends KaBaseActivity { } } - class QueryButtonHandler implements View.OnClickListener{ + class QueryButtonHandler implements View.OnClickListener { @Override public void onClick(View v) { String res = dbHelper.getAllDataAsString(); - if (res.isEmpty()){ + if (res.isEmpty()) { res = "No animals qwq"; } TextView tv = findViewById(R.id.P5QueryResult); @@ -159,15 +156,5 @@ public class Page5 extends KaBaseActivity { fl.setVisibility(View.VISIBLE); } } - - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - if (getCurrentFocus() != null) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); - } - return super.dispatchTouchEvent(ev); - } } diff --git a/app/src/main/java/uk/kagurach/android101/Page6.kt b/app/src/main/java/uk/kagurach/android101/Page6.kt index a70a32b..35a6c01 100644 --- a/app/src/main/java/uk/kagurach/android101/Page6.kt +++ b/app/src/main/java/uk/kagurach/android101/Page6.kt @@ -13,22 +13,29 @@ import android.widget.Button import android.widget.ImageView import android.widget.TextView import androidx.activity.enableEdgeToEdge -import androidx.compose.ui.platform.ComposeView import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.viewpager.widget.PagerAdapter import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager.LayoutParams import androidx.viewpager.widget.ViewPager.OnPageChangeListener +import androidx.work.Constraints +import androidx.work.Data +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager +import androidx.work.Worker +import androidx.work.WorkerParameters import uk.kagurach.android101.helper.PageHelper import uk.kagurach.android101.helper.ToastHelper +import kotlin.random.Random class Page6 : KaBaseActivity(), OnPageChangeListener, OnClickListener { - class Item(val name: String,val pic: Bitmap) + class Item(val name: String, val pic: Bitmap) - private var mItemList : ArrayList = arrayListOf() - val pageHelper = PageHelper(this, Page5::class.java, null) - lateinit var pager : ViewPager + private var mItemList: ArrayList = arrayListOf() + val pageHelper = PageHelper(this, Page5::class.java, Page7::class.java) + lateinit var pager: ViewPager lateinit var idShower: TextView @@ -43,12 +50,12 @@ class Page6 : KaBaseActivity(), OnPageChangeListener, OnClickListener { } val am = assets - for (i in 1..4){ + for (i in 1..4) { val item = Item(i.toString(), BitmapFactory.decodeStream(am.open("CatPics/${i}.jpeg"))) mItemList.add(item) } - val adapter = Page6CatPics(this,mItemList) + val adapter = Page6CatPics(this, mItemList) pager = findViewById(R.id.P6_vp_content) pager.adapter = adapter pager.currentItem = 0 @@ -60,13 +67,15 @@ class Page6 : KaBaseActivity(), OnPageChangeListener, OnClickListener { findViewById