Fab追加 #129

Merged
Fujimatsu merged 18 commits from feature/add_fab into main 2024-07-05 02:03:12 +00:00
8 changed files with 110 additions and 1 deletions

View File

@ -35,6 +35,7 @@ dependencies {
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
implementation project(':model')
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core

View File

@ -14,11 +14,13 @@ import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint;
import one.nem.kidshift.data.UserSettings;
import one.nem.kidshift.utils.FabManager;
import one.nem.kidshift.utils.KSLogger;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
@ -28,8 +30,13 @@ public class MainActivity extends AppCompatActivity {
@Inject
KSLoggerFactory loggerFactory;
@Inject
FabManager fabManager;
private KSLogger logger;
private FloatingActionButton fab;
@Inject
UserSettings userSettings;
@ -71,6 +78,9 @@ public class MainActivity extends AppCompatActivity {
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
fab = findViewById(R.id.mainFab);
fabManager.setFab(fab);
}
/**

View File

@ -27,4 +27,15 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/main_nav_menu" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/mainFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginBottom="24dp"
android:clickable="true"
app:layout_constraintBottom_toTopOf="@id/bottom_nav"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/add_24px" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -29,6 +29,7 @@ import one.nem.kidshift.model.ChildModel;
import one.nem.kidshift.model.ParentModel;
import one.nem.kidshift.model.callback.ChildModelCallback;
import one.nem.kidshift.model.callback.ParentModelCallback;
import one.nem.kidshift.utils.FabManager;
import one.nem.kidshift.utils.KSLogger;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
@ -44,6 +45,9 @@ public class SettingMainFragment extends Fragment {
@Inject
KSLoggerFactory ksLoggerFactory;
@Inject
FabManager fabManager;
private KSLogger logger;
TextView username;

View File

@ -8,7 +8,7 @@
android:id="@+id/swipe_refresh_layout">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

View File

@ -0,0 +1,55 @@
package one.nem.kidshift.utils;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import javax.inject.Inject;
import javax.inject.Singleton;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
import one.nem.kidshift.utils.models.FabEventCallback;
@Singleton
public class FabManager {
private FloatingActionButton fab;
private final KSLogger logger;
@Inject
public FabManager(KSLoggerFactory loggerFactory) {
this.logger = loggerFactory.create("FabManager");
}
public void setFab(FloatingActionButton fab) {
this.fab = fab;
}
private void checkFab() {
if (fab == null) {
logger.error("Fab is not set");
throw new IllegalStateException("Fab is not set");
}
}
public void show() {
checkFab();
fab.show();
}
public void hide() {
checkFab();
fab.hide();
}
public boolean isShown() {
checkFab();
return fab.isShown();
}
public void setFabEventCallback(FabEventCallback callback) {
checkFab();
fab.setOnClickListener(v -> callback.onClicked());
fab.setOnLongClickListener(v -> {
callback.onLongClicked();
return true;
});
}
}

View File

@ -0,0 +1,7 @@
package one.nem.kidshift.utils.models;
public interface FabEventCallback {
void onClicked();
void onLongClicked();
void onSwiped();
}

View File

@ -0,0 +1,21 @@
package one.nem.kidshift.utils.modules;
import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.components.SingletonComponent;
import one.nem.kidshift.utils.FabManager;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
import javax.inject.Singleton;
@Module
@InstallIn(SingletonComponent.class)
public class FabManagerModule {
@Provides
@Singleton
public FabManager provideFabManager(KSLoggerFactory loggerFactory) {
return new FabManager(loggerFactory);
}
}