Merge pull request 'refactor/refactor' (#151) from refactor/refactor into main

Reviewed-on: #151
This commit is contained in:
Fujimatsu 2024-07-08 15:14:18 +00:00
commit 61c46b12f6
12 changed files with 118 additions and 16 deletions

View File

@ -1,8 +1,12 @@
package one.nem.kidshift;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
@ -20,6 +24,8 @@ import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.divider.MaterialDivider;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigation.NavigationView;
@ -29,6 +35,7 @@ import dagger.hilt.android.AndroidEntryPoint;
import one.nem.kidshift.data.UserSettings;
import one.nem.kidshift.feature.child.ChildManageMainActivity;
import one.nem.kidshift.utils.FabManager;
import one.nem.kidshift.utils.FeatureFlag;
import one.nem.kidshift.utils.KSLogger;
import one.nem.kidshift.utils.factory.KSLoggerFactory;
@ -41,6 +48,10 @@ public class MainActivity extends AppCompatActivity {
@Inject
FabManager fabManager;
@Inject
FeatureFlag featureFlag;
private KSLogger logger;
private FloatingActionButton fab;
@ -63,7 +74,6 @@ public class MainActivity extends AppCompatActivity {
setSupportActionBar(toolbar);
DrawerLayout drawerLayout = findViewById(R.id.drawerLayout);
drawerLayout.open();
// アイテムが選択されたときの処理
NavigationView navigationView = findViewById(R.id.navigationView);
@ -75,6 +85,11 @@ public class MainActivity extends AppCompatActivity {
Intent intent = new Intent(MainActivity.this, ChildManageMainActivity.class);
startActivity(intent);
return true;
} else if (item.getItemId() == R.id.show_debug_dialog) {
showDebugDialog();
return true;
} else {
logger.warn("不明なアイテム: " + item.getItemId());
}
return false;
}
@ -116,6 +131,10 @@ public class MainActivity extends AppCompatActivity {
fab = findViewById(R.id.mainFab);
fabManager.setFab(fab);
// Apply feature flag
if (!featureFlag.isEnabled("showDebugMenu"))
bottomNavigationView.getMenu().removeItem(R.id.feature_debug_navigation);
}
/**
@ -124,4 +143,55 @@ public class MainActivity extends AppCompatActivity {
private void startup() {
}
private void showDebugDialog() {
ScrollView scrollView = new ScrollView(this);
scrollView.setPadding(32, 16, 32, 16);
LinearLayout linearLayout = new LinearLayout(this);
TextView serverAddressTextView = new TextView(this);
serverAddressTextView.setText("サーバーアドレス: " + userSettings.getApiSetting().getApiBaseUrl());
serverAddressTextView.setTextSize(16);
TextView accessTokenTextView = new TextView(this);
accessTokenTextView.setText("アクセストークン: " + userSettings.getAppCommonSetting().getAccessToken());
accessTokenTextView.setTextSize(16);
TextView childModeTextView = new TextView(this);
childModeTextView.setText("子供モード: " + userSettings.getAppCommonSetting().isChildMode());
childModeTextView.setTextSize(16);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.addView(serverAddressTextView);
linearLayout.addView(createDivider(this));
linearLayout.addView(accessTokenTextView);
linearLayout.addView(createDivider(this));
linearLayout.addView(childModeTextView);
scrollView.addView(linearLayout);
new MaterialAlertDialogBuilder(this)
.setTitle("参考情報(評価用)")
.setView(scrollView)
.setPositiveButton("OK", (dialog, which) -> {
// Do nothing
})
.show();
}
private MaterialDivider createDivider(Context context) {
MaterialDivider divider = new MaterialDivider(context);
// Margin (48, 16, 48, 16)
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins(48, 16, 48, 16);
divider.setLayoutParams(params);
return divider;
}
}

View File

@ -16,11 +16,6 @@
android:icon="@drawable/developer_mode_24px"
android:title="Debug" />
<item
android:id="@+id/feature_setting_navigation"
android:icon="@drawable/settings_24px"
android:title="Setting" />
<item
android:id="@+id/feature_wallet_parent_navigation"
android:icon="@drawable/wallet_24px"

View File

@ -2,6 +2,17 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/manage_child_account"
android:icon="@drawable/pending_24px"
android:icon="@drawable/manage_accounts_24px"
android:title="子供アカウントの管理" />
<!-- Divider -->
<item
android:id="@+id/divider"
android:title=""
android:enabled="false" />
<item
android:id="@+id/show_debug_dialog"
android:icon="@drawable/developer_mode_24px"
android:title="デバッグ情報" />
</menu>

View File

@ -2,11 +2,10 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_nav"
app:startDestination="@id/feature_debug_navigation">
app:startDestination="@id/feature_parent_navigation">
<include app:graph="@navigation/feature_debug_navigation" />
<include app:graph="@navigation/feature_child_navigation" />
<include app:graph="@navigation/feature_parent_navigation" />
<include app:graph="@navigation/feature_setting_navigation" />
<include app:graph="@navigation/feature_wallet_parent_navigation" />
</navigation>

View File

@ -179,6 +179,7 @@ public class CommonHomeFragment extends Fragment {
private void showChildSelectDialog(String taskId, String taskName) { // TODO: Assignされている子供かどうかを考慮するように
RecyclerView childListRecyclerView = new RecyclerView(requireContext());
childListRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
childListRecyclerView.setPadding(0, 48, 0, 0);
// TODO: キャッシュから取得する方にする
childData.getChildListDirect().thenAccept(childModelList -> {
ChildListItemAdapter childListItemAdapter = new ChildListItemAdapter(childModelList);

View File

@ -1,5 +1,6 @@
package one.nem.kidshift.feature.common.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
@ -37,7 +38,7 @@ public class ChildListItemAdapter extends RecyclerView.Adapter<ChildListItemAdap
@NonNull
@Override
public ChildListItemAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.list_item_task_completion_child, null);
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_task_completion_child, parent, false);
return new ViewHolder(view);
}

View File

@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp">
android:layout_marginHorizontal="24dp"
android:layout_marginVertical="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/textContainer"
@ -16,7 +17,6 @@
android:id="@+id/task_title_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="お手伝い名"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
android:textSize="20sp"
@ -27,7 +27,6 @@
android:id="@+id/task_contents_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="13dp"
android:text="円/回"
app:layout_constraintStart_toStartOf="parent"

View File

@ -3,7 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginVertical="4dp">
<LinearLayout
android:layout_width="match_parent"

View File

@ -12,7 +12,8 @@
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toTopOf="parent"
app:tabMode="scrollable">
</com.google.android.material.tabs.TabLayout>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M200,721.69Q254,668.69 325.5,638.19Q397,607.69 480,607.69Q563,607.69 634.5,638.19Q706,668.69 760,721.69L760,212.31Q760,207.69 756.15,203.85Q752.31,200 747.69,200L212.31,200Q207.69,200 203.85,203.85Q200,207.69 200,212.31L200,721.69ZM480,521.54Q534.15,521.54 572.08,483.62Q610,445.69 610,391.54Q610,337.39 572.08,299.46Q534.15,261.54 480,261.54Q425.85,261.54 387.92,299.46Q350,337.39 350,391.54Q350,445.69 387.92,483.62Q425.85,521.54 480,521.54ZM212.31,820Q182,820 161,799Q140,778 140,747.69L140,212.31Q140,182 161,161Q182,140 212.31,140L747.69,140Q778,140 799,161Q820,182 820,212.31L820,747.69Q820,778 799,799Q778,820 747.69,820L212.31,820ZM257.69,760L702.31,760Q702.31,757.38 702.31,755.77Q702.31,754.15 702.31,751.54Q654.92,709.23 598.35,688.46Q541.77,667.69 480,667.69Q419,667.69 362.23,688.27Q305.46,708.85 257.69,750.77Q257.69,753.38 257.69,755.38Q257.69,757.38 257.69,760ZM480,461.54Q451.15,461.54 430.58,440.96Q410,420.39 410,391.54Q410,362.69 430.58,342.12Q451.15,321.54 480,321.54Q508.85,321.54 529.42,342.12Q550,362.69 550,391.54Q550,420.39 529.42,440.96Q508.85,461.54 480,461.54ZM480,460.85L480,460.85Q480,460.85 480,460.85Q480,460.85 480,460.85L480,460.85Q480,460.85 480,460.85Q480,460.85 480,460.85L480,460.85Q480,460.85 480,460.85Q480,460.85 480,460.85Q480,460.85 480,460.85Q480,460.85 480,460.85Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M400,467.69Q342.25,467.69 301.13,426.57Q260,385.44 260,327.69Q260,269.94 301.13,228.82Q342.25,187.69 400,187.69Q457.75,187.69 498.87,228.82Q540,269.94 540,327.69Q540,385.44 498.87,426.57Q457.75,467.69 400,467.69ZM100,711.54L100,683.38Q100,653.08 115.66,628.5Q131.31,603.92 158.62,590.08Q212.77,562.62 270.86,547.46Q328.95,532.31 389.85,532.31L395.62,532.31Q408.37,532.31 416.99,541.28Q425.61,550.26 425.61,562.98Q425.61,575.69 416.99,584.31Q408.37,592.92 395.62,592.92Q394.08,592.92 392.73,592.92Q391.38,592.92 389.85,592.92Q335.72,592.92 284.98,605.96Q234.23,619 186.15,644Q174.62,650.15 167.31,660.31Q160,670.46 160,683.38L160,712.31L395.62,712.31Q408.37,712.31 416.99,720.94Q425.61,729.56 425.61,742.32Q425.61,755.08 416.99,763.69Q408.37,772.31 395.62,772.31L160.77,772.31Q135.46,772.31 117.73,754.58Q100,736.84 100,711.54ZM640.15,778.77L635.31,748.84Q621,744.61 608.38,737.77Q595.77,730.92 584.38,720.61L554.62,731.54Q545.08,734.77 536.18,731.14Q527.29,727.51 522.31,719.54L517,710.15Q511.92,701.61 513.36,691.54Q514.8,681.47 522.69,675L546.62,656Q542.31,640.46 542.31,625.38Q542.31,610.31 546.62,594.77L523.08,575Q515.16,568.69 513.54,559.04Q511.92,549.38 517,540.85L522.92,530.85Q528.01,522.87 536.74,519.24Q545.46,515.62 555,518.85L584.38,529.77Q595.38,519.46 608.19,512.81Q621,506.15 635.31,501.92L640.15,471.38Q642,461.23 649.62,455.04Q657.23,448.85 667.38,448.85L678,448.85Q688.15,448.85 695.77,455.35Q703.38,461.85 705.23,472L709.69,501.92Q724,506.15 736.81,513.12Q749.61,520.08 760.61,531L788.77,520.08Q798.92,516.23 808.08,519.88Q817.23,523.54 822.27,531.89L828.03,541.64Q833.07,550 831.46,559.96Q829.84,569.92 821.92,576.23L798.38,596Q802.69,610.43 802.69,626.06Q802.69,641.69 798.38,656L822.31,675Q830.23,681.31 831.65,691.15Q833.07,701 828,709.54L822.07,719.54Q817.07,727.51 808.5,731.14Q799.92,734.77 790.38,731.54L760.61,720.61Q749.23,730.92 736.61,737.77Q724,744.61 709.69,748.84L705.23,779.38Q703.38,789.54 695.77,795.73Q688.15,801.92 678,801.92L667.38,801.92Q657.23,801.92 649.62,795.42Q642,788.92 640.15,778.77ZM672.34,701.54Q703.77,701.54 726.11,679.16Q748.46,656.78 748.46,625.35Q748.46,593.92 726.08,571.58Q703.7,549.23 672.27,549.23Q640.85,549.23 618.5,571.61Q596.15,593.99 596.15,625.42Q596.15,656.84 618.53,679.19Q640.91,701.54 672.34,701.54ZM400,407.69Q433,407.69 456.5,384.19Q480,360.69 480,327.69Q480,294.69 456.5,271.19Q433,247.69 400,247.69Q367,247.69 343.5,271.19Q320,294.69 320,327.69Q320,360.69 343.5,384.19Q367,407.69 400,407.69ZM400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69Q400,327.69 400,327.69ZM412,712.31L412,712.31L412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Q412,712.31 412,712.31Z"/>
</vector>

View File

@ -22,7 +22,7 @@ public class FeatureFlagImpl implements FeatureFlag {
private final SharedPreferences sharedPreferences;
// ここを書き換えてプロファイルを書き換え
private final Profile currentProfile = Profile.DEVELOP;
private final Profile currentProfile = Profile.PRODUCTION;
enum Profile {
DEVELOP("develop"),
@ -68,14 +68,17 @@ public class FeatureFlagImpl implements FeatureFlag {
// init
private void initBase() { // ベース, (= Production)
setFlag("dynamicColorEnable", true, false);
setFlag("showDebugMenu", false, false);
}
private void initBeta() { // 上書き
setFlag("dynamicColorEnable", true, true);
setFlag("showDebugMenu", false, true);
}
private void initDevelop() { // 上書き
setFlag("dynamicColorEnable", true, true);
setFlag("showDebugMenu", true, true);
}
// utils