From 6cc406b56df16a50c547ac301b912cc6a8114ab3 Mon Sep 17 00:00:00 2001 From: alterdekim Date: Fri, 11 Oct 2024 02:31:34 +0300 Subject: [PATCH] GUI stuff --- build.gradle | 1 + .../fridaapp/activity/MainActivity.java | 30 +++--------- .../controller/MainActivityController.java | 49 +++++++++++++++++++ .../com/alterdekim/fridaapp/room/Config.java | 2 +- .../alterdekim/fridaapp/room/ConfigDAO.java | 15 +++--- src/main/res/layout/activity_main.xml | 20 +++++++- src/main/res/values/strings.xml | 1 + 7 files changed, 86 insertions(+), 32 deletions(-) diff --git a/build.gradle b/build.gradle index 386bc69..cd32465 100644 --- a/build.gradle +++ b/build.gradle @@ -69,6 +69,7 @@ dependencies { implementation 'io.reactivex.rxjava3:rxjava:3.1.5' compileOnly 'org.projectlombok:lombok:1.18.34' annotationProcessor 'org.projectlombok:lombok:1.18.34' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' annotationProcessor libs.room.compiler testImplementation libs.junit androidTestImplementation libs.ext.junit diff --git a/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java b/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java index 55b9229..c1b765a 100644 --- a/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java +++ b/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java @@ -39,11 +39,16 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Iterator; +import lombok.Getter; + public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener { private static final String TAG = MainActivity.class.getSimpleName(); private MainActivityController controller; + @Getter + private LinearLayout cfg_list; + ActivityResultLauncher someActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { @@ -53,7 +58,7 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI String raw_data = Util.readTextFromUri(this, data.getData()); String name = Util.getFilenameFromUri(this, data.getData()); String b32 = Base32.builder().get().encodeToString(raw_data.getBytes(StandardCharsets.UTF_8)); - db.userDao().insertAll(new Config(name, b32)); + this.controller.insertNewConfig(name, b32); } catch (IOException e) { Log.e(TAG, e.getMessage()); } @@ -75,12 +80,12 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI ControllerManager.putController(new MainActivityController()); this.controller = (MainActivityController) ControllerManager.getController(ControllerId.MainActivityController); - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + this.cfg_list = (LinearLayout) findViewById(R.id.config_list); this.controller.onCreateGUI(this); @@ -90,27 +95,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI popup.getMenuInflater().inflate(R.menu.mm, popup.getMenu()); popup.show(); }); - - - LinearLayout cfg_list = (LinearLayout) findViewById(R.id.config_list); - LayoutInflater inflater = getLayoutInflater(); - Iterator iter = db.userDao().getAll().iterator(); - while( iter.hasNext() ) { - Config config = iter.next(); - View cfg_instance = inflater.inflate(R.layout.single_config, cfg_list, false); - TextView view_name = (TextView) cfg_instance.findViewById(R.id.config_name); - SwitchMaterial view_switch = (SwitchMaterial) cfg_instance.findViewById(R.id.config_switch); - //view_switch.setUseMaterialThemeColors(true); - view_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - Log.i(TAG, "onCheckedChanged " + b); - } - }); - view_name.setText(config.title); - - if( iter.hasNext() ) inflater.inflate(R.layout.single_divider, cfg_list, false); - } } @Override diff --git a/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java b/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java index df3dbfc..a0b6c66 100644 --- a/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java +++ b/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java @@ -1,14 +1,33 @@ package com.alterdekim.fridaapp.controller; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + import androidx.appcompat.app.AppCompatActivity; import androidx.room.Room; +import com.alterdekim.fridaapp.R; +import com.alterdekim.fridaapp.activity.MainActivity; import com.alterdekim.fridaapp.room.AppDatabase; +import com.alterdekim.fridaapp.room.Config; +import com.google.android.material.switchmaterial.SwitchMaterial; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.functions.Action; +import io.reactivex.rxjava3.functions.Consumer; +import io.reactivex.rxjava3.schedulers.Schedulers; public class MainActivityController implements IController { + private static final String TAG = MainActivityController.class.getSimpleName(); + private AppDatabase db; + private MainActivity mainActivity; + @Override public ControllerId getControllerId() { return ControllerId.MainActivityController; @@ -17,5 +36,35 @@ public class MainActivityController implements IController { @Override public void onCreateGUI(AppCompatActivity activity) { this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "def-db").build(); + this.mainActivity = (MainActivity) activity; + this.initConfigListGUI(); + } + + private void initConfigListGUI() { + LayoutInflater inflater = this.mainActivity.getLayoutInflater(); + this.mainActivity.getCfg_list().removeAllViews(); + this.db.userDao().getAll() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnNext(config -> { + View cfg_instance = inflater.inflate(R.layout.single_config, this.mainActivity.getCfg_list(), false); + this.mainActivity.getCfg_list().addView(cfg_instance); + TextView view_name = (TextView) cfg_instance.findViewById(R.id.config_name); + SwitchMaterial view_switch = (SwitchMaterial) cfg_instance.findViewById(R.id.config_switch); + view_switch.setUseMaterialThemeColors(true); + view_switch.setOnCheckedChangeListener((compoundButton, b) -> Log.i(TAG, "onCheckedChanged " + b)); + view_name.setText(config.title); + }) + .doAfterNext(config -> inflater.inflate(R.layout.single_divider, this.mainActivity.getCfg_list(), false)) + .subscribe(); + } + + public void insertNewConfig(String name, String b32) { + db.userDao().insertAll(new Config(name, b32)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError(throwable -> Toast.makeText(MainActivityController.this.mainActivity, R.string.config_adding_error, Toast.LENGTH_LONG).show()) + .doOnComplete(this::initConfigListGUI) + .subscribe(); } } diff --git a/src/main/java/com/alterdekim/fridaapp/room/Config.java b/src/main/java/com/alterdekim/fridaapp/room/Config.java index c1f1332..de0161b 100644 --- a/src/main/java/com/alterdekim/fridaapp/room/Config.java +++ b/src/main/java/com/alterdekim/fridaapp/room/Config.java @@ -13,7 +13,7 @@ import lombok.Setter; @Getter @Setter public class Config { - @PrimaryKey + @PrimaryKey(autoGenerate = true) public int uid; @ColumnInfo(name = "title") diff --git a/src/main/java/com/alterdekim/fridaapp/room/ConfigDAO.java b/src/main/java/com/alterdekim/fridaapp/room/ConfigDAO.java index 9ac607e..6d87d65 100644 --- a/src/main/java/com/alterdekim/fridaapp/room/ConfigDAO.java +++ b/src/main/java/com/alterdekim/fridaapp/room/ConfigDAO.java @@ -5,23 +5,24 @@ import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; -import java.util.List; -import java.util.Optional; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; @Dao public interface ConfigDAO { @Query("SELECT * FROM config") - List getAll(); + Observable getAll(); @Query("SELECT * FROM config WHERE uid IN (:cfgIds)") - List loadAllByIds(int[] cfgIds); + Observable loadAllByIds(int[] cfgIds); @Query("SELECT * FROM config WHERE uid = :cfgId") - Optional loadById(int cfgId); + Single loadById(int cfgId); @Insert - void insertAll(Config... users); + Completable insertAll(Config... users); @Delete - void delete(Config user); + Completable delete(Config user); } diff --git a/src/main/res/layout/activity_main.xml b/src/main/res/layout/activity_main.xml index bf235d2..2a78eb9 100644 --- a/src/main/res/layout/activity_main.xml +++ b/src/main/res/layout/activity_main.xml @@ -25,10 +25,28 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 0fccaa7..a85e04d 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -2,4 +2,5 @@ Frida Create from scratch Import from file + Cannot add new config \ No newline at end of file