Skip to content
This repository has been archived by the owner on Dec 3, 2024. It is now read-only.

Refactor to use Dagger2 Hilt #2053

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("com.android.application")
id("com.github.ben-manes.versions")
id("com.github.triplet.play") version "3.7.0"
id("com.google.dagger.hilt.android")
}

dependencies {
Expand All @@ -21,9 +22,11 @@ dependencies {
}
implementation("com.google.zxing:core:3.4.1")

// dagger
implementation("com.google.dagger:hilt-android:2.49")
annotationProcessor("com.google.dagger:hilt-compiler:2.49")

implementation("androidx.constraintlayout:constraintlayout:2.0.4")
implementation("com.google.dagger:dagger:2.49")
annotationProcessor("com.google.dagger:dagger-compiler:2.49")
androidTestImplementation("androidx.test:rules:1.4.0")
androidTestImplementation("androidx.annotation:annotation:1.2.0")
}
Expand Down

This file was deleted.

18 changes: 8 additions & 10 deletions app/src/main/java/com/nutomic/syncthingandroid/SyncthingApp.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
package com.nutomic.syncthingandroid;

import android.app.Application;
import android.content.SharedPreferences;
import android.os.StrictMode;

import com.google.android.material.color.DynamicColors;
import com.nutomic.syncthingandroid.util.Languages;

import javax.inject.Inject;

import dagger.hilt.android.HiltAndroidApp;

@HiltAndroidApp
public class SyncthingApp extends Application {

@Inject DaggerComponent mComponent;
// temporarily here
@Inject
SharedPreferences mSharedPreferences;

@Override
public void onCreate() {
DynamicColors.applyToActivitiesIfAvailable(this);

super.onCreate();

DaggerDaggerComponent.builder()
.syncthingModule(new SyncthingModule(this))
.build()
.inject(this);

new Languages(this).setLanguage(this);
new Languages(this, mSharedPreferences).setLanguage(this);

// The main point here is to use a VM policy without
// `detectFileUriExposure`, as that leads to exceptions when e.g.
Expand All @@ -36,7 +37,4 @@ public void onCreate() {
StrictMode.setVmPolicy(policy);
}

public DaggerComponent component() {
return mComponent;
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,44 @@
package com.nutomic.syncthingandroid;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import com.nutomic.syncthingandroid.service.NotificationHandler;
import com.nutomic.syncthingandroid.util.ConfigXml;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.android.qualifiers.ApplicationContext;
import dagger.hilt.components.SingletonComponent;

@Module
@InstallIn(SingletonComponent.class)
public class SyncthingModule {

private final SyncthingApp mApp;

public SyncthingModule(SyncthingApp app) {
mApp = app;
@Provides
@Singleton
public static SharedPreferences getPreferences(
@ApplicationContext Context mApp
) {
return PreferenceManager.getDefaultSharedPreferences(mApp);
}

@Provides
@Singleton
public SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(mApp);
public static NotificationHandler getNotificationHandler(
@ApplicationContext Context mApp,
SharedPreferences preferences
) {
return new NotificationHandler(mApp, preferences);
}

@Provides
@Singleton
public NotificationHandler getNotificationHandler() {
return new NotificationHandler(mApp);
public static ConfigXml getConfigXml(@ApplicationContext Context mApp) {
return new ConfigXml(mApp);
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,18 @@
package com.nutomic.syncthingandroid.activities;

import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.Manifest;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.preference.PreferenceManager;
import android.provider.Settings;
import android.text.Html;
Expand All @@ -34,21 +26,30 @@
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.ComponentActivity;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.color.MaterialColors;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.databinding.ActivityFirstStartBinding;
import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.util.PermissionUtil;
import com.nutomic.syncthingandroid.util.Util;

import java.io.File;

import org.apache.commons.io.FileUtils;

import java.io.File;

import javax.inject.Inject;

public class FirstStartActivity extends Activity {
import dagger.hilt.android.AndroidEntryPoint;

@AndroidEntryPoint
public class FirstStartActivity extends ComponentActivity {

private enum Slide {

Expand Down Expand Up @@ -81,7 +82,6 @@ private enum Slide {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getApplication()).component().inject(this);

/**
* Recheck storage permission. If it has been revoked after the user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
Expand All @@ -30,7 +29,6 @@

import com.google.common.collect.Sets;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.SyncthingService;
import com.nutomic.syncthingandroid.service.SyncthingServiceBinder;
Expand Down Expand Up @@ -85,8 +83,6 @@ public static Intent createIntent(Context context, String initialDirectory, @Nul
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getApplication()).component().inject(this);

setContentView(R.layout.activity_folder_picker);
mListView = findViewById(android.R.id.list);
mListView.setOnItemClickListener(this);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.nutomic.syncthingandroid.activities;

import static java.lang.Math.min;

import android.annotation.SuppressLint;
import android.app.Activity;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
Expand All @@ -20,20 +19,8 @@
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.PersistableBundle;
import android.os.PowerManager;
import android.provider.Settings;

import com.google.android.material.color.DynamicColors;
import com.google.android.material.tabs.TabLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.core.view.GravityCompat;
import androidx.viewpager.widget.ViewPager;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
Expand All @@ -45,14 +32,21 @@
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.annimon.stream.function.Consumer;
import com.google.android.material.tabs.TabLayout;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.SyncthingApp;
import com.nutomic.syncthingandroid.fragments.DeviceListFragment;
import com.nutomic.syncthingandroid.fragments.DrawerFragment;
import com.nutomic.syncthingandroid.fragments.FolderListFragment;
import com.nutomic.syncthingandroid.service.Constants;
import com.nutomic.syncthingandroid.service.RestApi;
import com.nutomic.syncthingandroid.service.SyncthingService;
import com.nutomic.syncthingandroid.service.SyncthingServiceBinder;
Expand All @@ -64,13 +58,14 @@

import javax.inject.Inject;

import static java.lang.Math.min;
import dagger.hilt.android.AndroidEntryPoint;

/**
* Shows {@link FolderListFragment} and
* {@link DeviceListFragment} in different tabs, and
* {@link DrawerFragment} in the navigation drawer.
*/
@AndroidEntryPoint
public class MainActivity extends StateDialogActivity
implements SyncthingService.OnServiceStateChangeListener {

Expand Down Expand Up @@ -219,7 +214,6 @@ public CharSequence getPageTitle(int position) {
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SyncthingApp) getApplication()).component().inject(this);

setContentView(R.layout.activity_main);
mDrawerLayout = findViewById(R.id.drawer_layout);
Expand Down
Loading
Loading