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