x1ongzhu 1 年之前
父節點
當前提交
8a30764b9e

+ 2 - 2
app/build.gradle

@@ -90,6 +90,6 @@ dependencies {
     implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01"
     implementation "androidx.work:work-runtime:2.9.0"
     implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
-    implementation("com.google.dagger:hilt-android:2.44")
-    kapt("com.google.dagger:hilt-android-compiler:2.44")
+    implementation("com.google.dagger:hilt-android:2.48")
+    kapt("com.google.dagger:hilt-android-compiler:2.48")
 }

+ 0 - 144
app/src/main/java/com/example/modifier/FixFragmentNavigator.java

@@ -1,144 +0,0 @@
-package com.example.modifier;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-
-import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
-import androidx.navigation.NavDestination;
-import androidx.navigation.NavOptions;
-import androidx.navigation.Navigator;
-import androidx.navigation.fragment.FragmentNavigator;
-
-import java.lang.reflect.Field;
-import java.util.ArrayDeque;
-import java.util.List;
-import java.util.Map;
-
-@Navigator.Name("fixFragment")
-public class FixFragmentNavigator extends FragmentNavigator {
-    private final String TAG = "ReLoadFragmentNavictor";
-    private final Context mContext;
-    private final FragmentManager mFragmentManager;
-    private final int mContainerId;
-    String oldClassName = null;
-
-    public FixFragmentNavigator(@NonNull Context context, @NonNull FragmentManager manager, int containerId) {
-        super(context, manager, containerId);
-        mContext = context;
-        mFragmentManager = manager;
-        mContainerId = containerId;
-    }
-
-    @Nullable
-    @Override
-    public NavDestination navigate(@NonNull Destination destination, @Nullable Bundle args, @Nullable NavOptions navOptions, @Nullable Navigator.Extras navigatorExtras) {
-
-        if (mFragmentManager.isStateSaved()) {
-            Log.i(TAG, "Ignoring navigate() call: FragmentManager has already"
-                    + " saved its state");
-            return null;
-        }
-        String className = destination.getClassName();
-        if (className.equals(oldClassName)) {
-            return null;
-        }
-        oldClassName = className;
-        if (className.charAt(0) == '.') {
-            className = mContext.getPackageName() + className;
-        }
-        Fragment frag = mFragmentManager.findFragmentByTag(className);
-        if (null == frag) {
-            //不存在,则创建
-            frag = instantiateFragment(mContext, mFragmentManager, className, args);
-
-        }
-
-        frag.setArguments(args);
-        final FragmentTransaction ft = mFragmentManager.beginTransaction();
-
-        int enterAnim = navOptions != null ? navOptions.getEnterAnim() : -1;
-        int exitAnim = navOptions != null ? navOptions.getExitAnim() : -1;
-        int popEnterAnim = navOptions != null ? navOptions.getPopEnterAnim() : -1;
-        int popExitAnim = navOptions != null ? navOptions.getPopExitAnim() : -1;
-        if (enterAnim != -1 || exitAnim != -1 || popEnterAnim != -1 || popExitAnim != -1) {
-            enterAnim = enterAnim != -1 ? enterAnim : 0;
-            exitAnim = exitAnim != -1 ? exitAnim : 0;
-            popEnterAnim = popEnterAnim != -1 ? popEnterAnim : 0;
-            popExitAnim = popExitAnim != -1 ? popExitAnim : 0;
-            ft.setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim);
-        }
-
-//        ft.replace(mContainerId, frag);
-        List<Fragment> fragments = mFragmentManager.getFragments();
-        for (Fragment fragment : fragments) {
-            ft.hide(fragment);
-        }
-        if (!frag.isAdded()) {
-            ft.add(mContainerId, frag, className);
-        }
-
-        ft.show(frag);
-        ft.setPrimaryNavigationFragment(frag);
-
-        final @IdRes int destId = destination.getId();
-
-        //通过反射获取mBackStack
-        ArrayDeque<Integer> mBackStack;
-        try {
-            Field field = FragmentNavigator.class.getDeclaredField("mBackStack");
-            field.setAccessible(true);
-            mBackStack = (ArrayDeque<Integer>) field.get(this);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-
-        final boolean initialNavigation = mBackStack.isEmpty();
-        final boolean isSingleTopReplacement = navOptions != null && !initialNavigation
-                && navOptions.shouldLaunchSingleTop()
-                && mBackStack.peekLast() == destId;
-
-        boolean isAdded;
-        if (initialNavigation) {
-            isAdded = true;
-        } else if (isSingleTopReplacement) {
-            if (mBackStack.size() > 1) {
-                mFragmentManager.popBackStack(
-                        generateBackStackName(mBackStack.size(), mBackStack.peekLast()),
-                        FragmentManager.POP_BACK_STACK_INCLUSIVE);
-                ft.addToBackStack(generateBackStackName(mBackStack.size(), destId));
-            }
-            isAdded = false;
-        } else {
-            ft.addToBackStack(generateBackStackName(mBackStack.size() + 1, destId));
-            isAdded = true;
-        }
-        if (navigatorExtras instanceof Extras) {
-            Extras extras = (Extras) navigatorExtras;
-            for (Map.Entry<View, String> sharedElement : extras.getSharedElements().entrySet()) {
-                ft.addSharedElement(sharedElement.getKey(), sharedElement.getValue());
-            }
-        }
-        ft.setReorderingAllowed(true);
-        ft.commit();
-        if (isAdded) {
-            mBackStack.add(destId);
-            return destination;
-        } else {
-            return null;
-        }
-    }
-
-    //navigate需要打方法重复类直接复制过来就可以
-    @NonNull
-    private String generateBackStackName(int backStackIndex, int destId) {
-        return backStackIndex + "-" + destId;
-    }
-}

+ 6 - 1
app/src/main/java/com/example/modifier/repository/ServerConfigRepository.kt

@@ -7,13 +7,18 @@ import androidx.datastore.preferences.core.edit
 import androidx.datastore.preferences.core.stringPreferencesKey
 import androidx.datastore.preferences.preferencesDataStore
 import com.example.modifier.model.ServerConfig
+import dagger.hilt.android.qualifiers.ApplicationContext
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.flow.map
 import javax.inject.Inject
 
 val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "serverConfig")
 
-class ServerConfigRepository @Inject constructor(private val context: Context) {
+class ServerConfigRepository {
+
+    @Inject
+    @ApplicationContext
+    lateinit var context: Context
 
     companion object {
         val URL = stringPreferencesKey("url")

+ 3 - 0
app/src/main/java/com/example/modifier/ui/LoginActivity.kt

@@ -11,8 +11,10 @@ import com.example.modifier.Global
 import com.example.modifier.R
 import com.example.modifier.databinding.ActivityLoginBinding
 import com.example.modifier.model.ServerConfig
+import dagger.hilt.android.AndroidEntryPoint
 import org.apache.commons.lang3.StringUtils
 
+@AndroidEntryPoint
 class LoginActivity : AppCompatActivity() {
     private val loginViewModel: LoginViewModel by viewModels()
     private lateinit var binding: ActivityLoginBinding
@@ -25,6 +27,7 @@ class LoginActivity : AppCompatActivity() {
 
         binding.etServer.setSimpleItems(Global.servers.toTypedArray())
         binding.btnLogin.setOnClickListener { v ->
+            loginViewModel.save()
             val server = binding.etDeviceLabel.text?.toString()
             val deviceLabel = binding.etDeviceLabel.text?.toString()
             val username = binding.etUsername.text?.toString()

+ 13 - 1
app/src/main/java/com/example/modifier/ui/LoginViewModel.kt

@@ -1,6 +1,7 @@
 package com.example.modifier.ui
 
 import android.content.Context
+import android.util.Log
 import androidx.datastore.core.DataStore
 import androidx.datastore.dataStore
 import androidx.datastore.preferences.core.Preferences
@@ -11,22 +12,33 @@ import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
 import com.example.modifier.model.ServerConfig
 import com.example.modifier.repository.ServerConfigRepository
+import dagger.hilt.android.lifecycle.HiltViewModel
+import dagger.hilt.android.qualifiers.ApplicationContext
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import javax.inject.Inject
 
-class LoginViewModel @Inject constructor(private val serverConfigRepository: ServerConfigRepository) : ViewModel() {
+@HiltViewModel
+class LoginViewModel @Inject constructor() : ViewModel() {
     private val _uiState = MutableStateFlow(LoginUiState())
     val uiState: StateFlow<LoginUiState> = _uiState.asStateFlow()
     val serverConfig = MutableLiveData<ServerConfig>()
 
+    @Inject
+    @ApplicationContext
+    lateinit var appContext: Context
 
     fun load() {
         serverConfig.postValue(ServerConfig())
     }
 
     fun save() {
+        if (this::appContext.isInitialized) {
+            Log.d("LoginViewModel", "appContext is initialized")
+        } else {
+            Log.d("LoginViewModel", "appContext is not initialized")
+        }
 
     }
 }

+ 1 - 1
build.gradle

@@ -2,5 +2,5 @@
 plugins {
     alias(libs.plugins.androidApplication) apply false
     alias(libs.plugins.jetbrainsKotlinAndroid) apply false
-    id("com.google.dagger.hilt.android") version "2.44" apply false
+    id("com.google.dagger.hilt.android") version "2.48" apply false
 }