From 1a5cffbe5bd92c39055b11df5a60e70fe9f3b176 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Mon, 5 Oct 2015 18:00:07 +0800 Subject: [PATCH] migrating to dagger --- build.gradle | 4 +- global.gradle | 2 +- twidere.component.common/build.gradle | 4 +- twidere.component.nyan/build.gradle | 2 +- twidere.donate.nyanwp.wear/build.gradle | 2 +- .../build.gradle | 2 +- twidere.library.extension/build.gradle | 2 +- twidere.wear/build.gradle | 4 +- twidere/build.gradle | 27 +- .../edu/tsinghua/hotmobi/model/BaseEvent.java | 42 +++- .../edu/tsinghua/hotmobi/model/LatLng.java | 37 ++- .../edu/tsinghua/hotmobi/model/LinkEvent.java | 38 ++- .../tsinghua/hotmobi/model/MediaEvent.java | 10 + .../tsinghua/hotmobi/model/NetworkEvent.java | 4 + .../tsinghua/hotmobi/model/RefreshEvent.java | 5 + .../tsinghua/hotmobi/model/SessionEvent.java | 39 ++- .../tsinghua/hotmobi/model/TweetEvent.java | 9 + .../support/BaseAppCompatActivity.java | 18 +- .../activity/support/ComposeActivity.java | 3 - .../activity/support/HomeActivity.java | 29 ++- .../support/ThemedFragmentActivity.java | 7 + .../twidere/adapter/AbsActivitiesAdapter.java | 5 +- .../twidere/adapter/AbsStatusesAdapter.java | 5 +- .../twidere/adapter/AbsUserListsAdapter.java | 5 +- .../twidere/adapter/AbsUsersAdapter.java | 5 +- .../twidere/adapter/BaseAdapter.java | 48 ++++ .../adapter/LoadMoreSupportAdapter.java | 7 +- .../adapter/MessageEntriesAdapter.java | 8 +- .../twidere/app/TwidereApplication.java | 29 ++- .../twidere/fragment/BaseFragment.java | 18 +- .../twidere/fragment/BaseListFragment.java | 17 +- .../support/AbsActivitiesFragment.java | 2 +- .../fragment/support/AbsStatusesFragment.java | 8 +- .../AddUserListMemberDialogFragment.java | 2 +- .../support/BaseSupportDialogFragment.java | 14 +- .../fragment/support/BaseSupportFragment.java | 26 +- .../CreateUserBlockDialogFragment.java | 4 +- .../support/CreateUserListDialogFragment.java | 5 +- .../support/CreateUserMuteDialogFragment.java | 4 +- .../DeleteUserListMembersDialogFragment.java | 2 +- .../DestroyFriendshipDialogFragment.java | 2 +- .../DestroySavedSearchDialogFragment.java | 114 ++++----- .../support/DestroyStatusDialogFragment.java | 78 +++--- .../DestroyUserListDialogFragment.java | 84 +++---- ...royUserListSubscriptionDialogFragment.java | 88 +++---- .../support/DirectMessagesFragment.java | 12 +- .../fragment/support/DraftsFragment.java | 4 +- .../support/HomeTimelineFragment.java | 6 +- .../support/MentionsTimelineFragment.java | 6 +- .../support/MessagesConversationFragment.java | 17 +- .../support/ReportSpamDialogFragment.java | 2 +- .../support/RetweetQuoteDialogFragment.java | 61 +++-- .../support/ScheduledStatusesFragment.java | 1 + .../fragment/support/SearchFragment.java | 2 +- .../fragment/support/StatusFragment.java | 12 +- .../support/TrendsSuggestionsFragment.java | 4 +- .../fragment/support/UserFragment.java | 12 +- .../fragment/support/UserListFragment.java | 5 +- .../provider/TwidereCommandProvider.java | 231 +++++++++--------- .../twidere/provider/TwidereDataProvider.java | 28 ++- .../receiver/NotificationReceiver.java | 3 +- .../service/BackgroundOperationService.java | 11 +- .../twidere/service/RefreshService.java | 8 +- .../mariotaku/twidere/util/ActivityStack.java | 51 ++++ .../twidere/util/AsyncTwitterWrapper.java | 5 - .../twidere/util/MultiSelectEventHandler.java | 8 +- .../org/mariotaku/twidere/util/Utils.java | 3 - .../util/dagger/ApplicationModule.java | 72 ++++++ .../BackgroundOperationServiceComponent.java | 33 +++ .../component/BaseAdapterComponent.java | 35 +++ .../BaseAppCompatActivityComponent.java | 33 +++ .../component/BaseListFragmentComponent.java | 33 +++ .../BaseSupportDialogFragmentComponent.java | 33 +++ .../dagger/component/GeneralComponent.java | 42 ++++ .../component/RefreshServiceComponent.java | 33 +++ .../ThemedFragmentActivityComponent.java | 33 +++ .../TwidereCommandProviderComponent.java | 34 +++ .../TwidereDataProviderComponent.java | 33 +++ .../twidere/view/holder/StatusViewHolder.java | 8 +- .../layout/dialog_status_quote_retweet.xml | 37 ++- 80 files changed, 1299 insertions(+), 522 deletions(-) create mode 100644 twidere/src/main/java/org/mariotaku/twidere/adapter/BaseAdapter.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/ActivityStack.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/ApplicationModule.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BackgroundOperationServiceComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAdapterComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAppCompatActivityComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseListFragmentComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseSupportDialogFragmentComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/GeneralComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/RefreshServiceComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/ThemedFragmentActivityComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereCommandProviderComponent.java create mode 100644 twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereDataProviderComponent.java diff --git a/build.gradle b/build.gradle index 4d4f5cb27..f2e9ab0ef 100644 --- a/build.gradle +++ b/build.gradle @@ -8,8 +8,8 @@ buildscript { dependencies { classpath 'com.github.ben-manes:gradle-versions-plugin:0.11.3' classpath 'com.android.tools.build:gradle:1.3.1' - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7' - classpath('fr.avianey.androidsvgdrawable:gradle-plugin:1.0.2') { + classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath('fr.avianey.androidsvgdrawable:gradle-plugin:2.0.0') { // should be excluded to avoid conflict exclude group: 'xerces' } diff --git a/global.gradle b/global.gradle index c0d49cddd..af4fcfc4a 100644 --- a/global.gradle +++ b/global.gradle @@ -18,7 +18,7 @@ */ android { compileSdkVersion 23 - buildToolsVersion '23.0.0' + buildToolsVersion '23.0.1' lintOptions { abortOnError false diff --git a/twidere.component.common/build.gradle b/twidere.component.common/build.gradle index fdeaf4452..e93f3b33d 100644 --- a/twidere.component.common/build.gradle +++ b/twidere.component.common/build.gradle @@ -39,8 +39,8 @@ android { dependencies { apt 'com.bluelinelabs:logansquare-compiler:1.1.0' apt 'com.hannesdorfmann.parcelableplease:processor:1.0.1' - compile 'com.android.support:support-annotations:23.0.0' - compile 'com.android.support:support-v4:23.0.0' + compile 'com.android.support:support-annotations:23.0.1' + compile 'com.android.support:support-v4:23.0.1' compile 'com.bluelinelabs:logansquare:1.1.0' compile 'org.apache.commons:commons-lang3:3.4' compile 'com.github.mariotaku:RestFu:0.9.2' diff --git a/twidere.component.nyan/build.gradle b/twidere.component.nyan/build.gradle index a166550ae..5c9762bb6 100644 --- a/twidere.component.nyan/build.gradle +++ b/twidere.component.nyan/build.gradle @@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle') android { defaultConfig { minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/twidere.donate.nyanwp.wear/build.gradle b/twidere.donate.nyanwp.wear/build.gradle index f5ff05134..1c6246772 100644 --- a/twidere.donate.nyanwp.wear/build.gradle +++ b/twidere.donate.nyanwp.wear/build.gradle @@ -36,7 +36,7 @@ android { } dependencies { - compile 'com.google.android.support:wearable:1.2.0' + compile 'com.google.android.support:wearable:1.3.0' compile project(':twidere.component.nyan') compile fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/twidere.extension.launcher.compose/build.gradle b/twidere.extension.launcher.compose/build.gradle index 4833c4036..664845978 100644 --- a/twidere.extension.launcher.compose/build.gradle +++ b/twidere.extension.launcher.compose/build.gradle @@ -24,7 +24,7 @@ android { defaultConfig { applicationId "org.mariotaku.twidere.extension.launcher.compose" minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/twidere.library.extension/build.gradle b/twidere.library.extension/build.gradle index cf5704e4a..2e2a4b142 100644 --- a/twidere.library.extension/build.gradle +++ b/twidere.library.extension/build.gradle @@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle') android { defaultConfig { minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/twidere.wear/build.gradle b/twidere.wear/build.gradle index 7e6973492..bdb9c106a 100644 --- a/twidere.wear/build.gradle +++ b/twidere.wear/build.gradle @@ -41,6 +41,6 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.google.android.support:wearable:1.1.0' - compile 'com.google.android.gms:play-services-wearable:7.5.0' + compile 'com.google.android.support:wearable:1.3.0' + compile 'com.google.android.gms:play-services-wearable:8.1.0' } diff --git a/twidere/build.gradle b/twidere/build.gradle index de3da4079..eceb49f56 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -58,19 +58,20 @@ dependencies { // wearApp project(':twidere.wear') apt 'com.bluelinelabs:logansquare-compiler:1.1.0' apt 'com.hannesdorfmann.parcelableplease:processor:1.0.1' + apt 'com.google.dagger:dagger-compiler:2.0.1' compile 'com.android.support:multidex:1.0.1' - compile 'com.android.support:support-v13:23.0.0' - compile 'com.android.support:appcompat-v7:23.0.0' - compile 'com.android.support:cardview-v7:23.0.0' - compile 'com.android.support:recyclerview-v7:23.0.0' + compile 'com.android.support:support-v13:23.0.1' + compile 'com.android.support:appcompat-v7:23.0.1' + compile 'com.android.support:cardview-v7:23.0.1' + compile 'com.android.support:recyclerview-v7:23.0.1' compile 'com.twitter:twitter-text:1.12.1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' compile 'com.squareup:otto:1.3.8' compile 'dnsjava:dnsjava:2.1.7' compile 'com.commonsware.cwac:merge:1.1.1' - compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.1.4' + compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.4.0' compile 'com.rengwuxian.materialedittext:library:2.1.4' - compile 'com.pnikosis:materialish-progress:1.5' + compile 'com.pnikosis:materialish-progress:1.7' compile 'com.squareup.okhttp:okhttp:2.5.0' compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.7' compile 'com.github.johnpersano:supertoasts:1.3.4.1@aar' @@ -79,28 +80,30 @@ dependencies { compile 'com.github.uucky:ColorPicker-Android:0.9.7@aar' compile 'com.github.boxme:asyncmanager:1.0.0' compile 'com.sprylab.android.texturevideoview:texturevideoview:1.0.1' - compile 'com.squareup:pollexor:2.0.3' + compile 'com.squareup:pollexor:2.0.4' compile 'com.squareup:tape:1.2.3' compile 'org.apache.commons:commons-lang3:3.4' compile 'com.bluelinelabs:logansquare:1.1.0' compile 'ch.acra:acra:4.6.2' compile 'org.jraf:android-switch-backport:2.0.1' - compile 'com.fasterxml.jackson.jr:jackson-jr-objects:2.6.1' + compile 'com.fasterxml.jackson.jr:jackson-jr-objects:2.6.2' compile 'com.makeramen:roundedimageview:2.1.1' - compile 'com.soundcloud.android:android-crop:1.0.0@aar' + compile 'com.soundcloud.android:android-crop:1.0.1@aar' compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.1' compile 'com.github.mariotaku:PickNCrop:44b09cbc69' compile 'com.diogobernardino:williamchart:2.0.1' compile 'com.lnikkila:extendedtouchview:0.1.0' - googleCompile 'com.google.android.gms:play-services-maps:7.8.0' + compile 'com.google.dagger:dagger:2.0.1' + googleCompile 'com.google.android.gms:play-services-maps:8.1.0' googleCompile 'com.google.maps.android:android-maps-utils:0.4' fdroidCompile 'org.osmdroid:osmdroid-android:4.3' fdroidCompile 'org.slf4j:slf4j-simple:1.7.12' - debugCompile 'com.facebook.stetho:stetho:1.1.1' - debugCompile 'com.facebook.stetho:stetho-okhttp:1.1.1' + debugCompile 'com.facebook.stetho:stetho:1.2.0' + debugCompile 'com.facebook.stetho:stetho-okhttp:1.2.0' compile project(':twidere.component.common') compile project(':twidere.component.nyan') compile fileTree(dir: 'libs/main', include: ['*.jar']) + provided 'javax.annotation:jsr250-api:1.0' // googleCompile fileTree(dir: 'libs/google', include: ['*.jar']) } diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/BaseEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/BaseEvent.java index 8950f0b26..028cab7fd 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/BaseEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/BaseEvent.java @@ -20,9 +20,13 @@ package edu.tsinghua.hotmobi.model; import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; import java.util.TimeZone; @@ -31,17 +35,43 @@ import edu.tsinghua.hotmobi.HotMobiLogger; /** * Created by mariotaku on 15/8/8. */ +@ParcelablePlease @JsonObject -public class BaseEvent { +public class BaseEvent implements Parcelable { + + public static final Creator CREATOR = new Creator() { + @Override + public BaseEvent createFromParcel(Parcel in) { + return new BaseEvent(in); + } + + @Override + public BaseEvent[] newArray(int size) { + return new BaseEvent[size]; + } + }; + + @ParcelableThisPlease @JsonField(name = "start_time") long startTime; + @ParcelableThisPlease @JsonField(name = "end_time") long endTime; + @ParcelableThisPlease @JsonField(name = "time_offset") long timeOffset; + @ParcelableThisPlease @JsonField(name = "location") LatLng location; + public BaseEvent() { + } + + protected BaseEvent(Parcel in) { + BaseEventParcelablePlease.readFromParcel(this, in); + } + + public void setStartTime(long startTime) { this.startTime = startTime; } @@ -67,4 +97,14 @@ public class BaseEvent { public void markEnd() { setEndTime(System.currentTimeMillis()); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + BaseEventParcelablePlease.writeToParcel(this, dest, flags); + } } diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/LatLng.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/LatLng.java index f1adfa3d0..93ffbd796 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/LatLng.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/LatLng.java @@ -19,16 +19,24 @@ package edu.tsinghua.hotmobi.model; +import android.os.Parcel; +import android.os.Parcelable; + import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; /** * Created by mariotaku on 15/8/13. */ +@ParcelablePlease @JsonObject -public class LatLng { +public class LatLng implements Parcelable { + @ParcelableThisPlease @JsonField(name = "latitude") double latitude; + @ParcelableThisPlease @JsonField(name = "longitude") double longitude; @@ -36,11 +44,26 @@ public class LatLng { } public LatLng(double latitude, double longitude) { - this.latitude = latitude; this.longitude = longitude; } + protected LatLng(Parcel in) { + LatLngParcelablePlease.readFromParcel(this, in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public LatLng createFromParcel(Parcel in) { + return new LatLng(in); + } + + @Override + public LatLng[] newArray(int size) { + return new LatLng[size]; + } + }; + public double getLatitude() { return latitude; } @@ -56,4 +79,14 @@ public class LatLng { public void setLongitude(double longitude) { this.longitude = longitude; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + LatLngParcelablePlease.writeToParcel(this, dest, flags); + } } diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/LinkEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/LinkEvent.java index 4f670b3f4..064eff8b2 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/LinkEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/LinkEvent.java @@ -20,6 +20,8 @@ package edu.tsinghua.hotmobi.model; import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; @@ -30,13 +32,47 @@ import edu.tsinghua.hotmobi.TypeMappingUtil; * Created by mariotaku on 15/8/20. */ @JsonObject -public class LinkEvent extends BaseEvent { +public class LinkEvent extends BaseEvent implements Parcelable { @JsonField(name = "link") String link; @JsonField(name = "type") String type; + public LinkEvent() { + + } + + protected LinkEvent(Parcel in) { + super(in); + link = in.readString(); + type = in.readString(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(link); + dest.writeString(type); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public LinkEvent createFromParcel(Parcel in) { + return new LinkEvent(in); + } + + @Override + public LinkEvent[] newArray(int size) { + return new LinkEvent[size]; + } + }; + public void setLink(String link) { this.link = link; } diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/MediaEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/MediaEvent.java index 966df47dd..83ceb575e 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/MediaEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/MediaEvent.java @@ -23,6 +23,8 @@ import android.content.Context; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.model.ParcelableStatus; @@ -30,21 +32,29 @@ import org.mariotaku.twidere.model.ParcelableStatus; /** * Created by mariotaku on 15/8/7. */ +@ParcelablePlease @JsonObject public class MediaEvent extends BaseEvent { + @ParcelableThisPlease @JsonField(name = "id") long id; + @ParcelableThisPlease @JsonField(name = "user_id") long userId; + @ParcelableThisPlease @JsonField(name = "tweet_type", typeConverter = TweetType.TweetTypeConverter.class) TweetType tweetType; + @ParcelableThisPlease @JsonField(name = "timeline_type", typeConverter = TimelineType.TimelineTypeConverter.class) TimelineType timelineType; + @ParcelableThisPlease @JsonField(name = "preview_url") String previewUrl; + @ParcelableThisPlease @JsonField(name = "media_url") String mediaUrl; + @ParcelableThisPlease @JsonField(name = "preview_enabled") boolean previewEnabled; diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/NetworkEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/NetworkEvent.java index 19528a418..897559987 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/NetworkEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/NetworkEvent.java @@ -25,13 +25,17 @@ import android.net.NetworkInfo; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; /** * Created by mariotaku on 15/8/20. */ +@ParcelablePlease @JsonObject public class NetworkEvent extends BaseEvent { + @ParcelableThisPlease @JsonField(name = "network_type") int networkType; diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/RefreshEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/RefreshEvent.java index 854b9b4c4..87b6e5fe0 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/RefreshEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/RefreshEvent.java @@ -23,15 +23,20 @@ import android.content.Context; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; /** * Created by mariotaku on 15/8/8. */ +@ParcelablePlease @JsonObject public class RefreshEvent extends BaseEvent { + @ParcelableThisPlease @JsonField(name = "ids") long[] ids; + @ParcelableThisPlease @JsonField(name = "timeline_type", typeConverter = TimelineType.TimelineTypeConverter.class) TimelineType timelineType; diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/SessionEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/SessionEvent.java index 83d5e5a3f..3edfb2be3 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/SessionEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/SessionEvent.java @@ -21,19 +21,45 @@ package edu.tsinghua.hotmobi.model; import android.content.Context; import android.content.res.Configuration; +import android.os.Parcel; +import android.os.Parcelable; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; /** * Created by mariotaku on 15/8/8. */ +@ParcelablePlease @JsonObject -public class SessionEvent extends BaseEvent { +public class SessionEvent extends BaseEvent implements Parcelable { + public static final Creator CREATOR = new Creator() { + @Override + public SessionEvent createFromParcel(Parcel in) { + return new SessionEvent(in); + } + + @Override + public SessionEvent[] newArray(int size) { + return new SessionEvent[size]; + } + }; + + @ParcelableThisPlease @JsonField(name = "configuration") String configuration; + protected SessionEvent(Parcel in) { + super(in); + SessionEventParcelablePlease.readFromParcel(this, in); + } + + public SessionEvent() { + + } public static SessionEvent create(Context context) { final SessionEvent event = new SessionEvent(); @@ -44,6 +70,17 @@ public class SessionEvent extends BaseEvent { return event; } + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + SessionEventParcelablePlease.writeToParcel(this, dest, flags); + } + + @Override + public int describeContents() { + return 0; + } + public void setConfiguration(String configuration) { this.configuration = configuration; } diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/model/TweetEvent.java b/twidere/src/main/java/edu/tsinghua/hotmobi/model/TweetEvent.java index dca93f07f..541e12932 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/model/TweetEvent.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/model/TweetEvent.java @@ -24,25 +24,34 @@ import android.content.Context; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter; +import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; +import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; import org.mariotaku.twidere.model.ParcelableStatus; /** * Created by mariotaku on 15/8/7. */ +@ParcelablePlease @JsonObject public class TweetEvent extends BaseEvent { + @ParcelableThisPlease @JsonField(name = "id") long id; + @ParcelableThisPlease @JsonField(name = "account_id") long accountId; + @ParcelableThisPlease @JsonField(name = "user_id") long userId; + @ParcelableThisPlease @JsonField(name = "tweet_type", typeConverter = TweetType.TweetTypeConverter.class) TweetType tweetType; + @ParcelableThisPlease @JsonField(name = "timeline_type", typeConverter = TimelineType.TimelineTypeConverter.class) TimelineType timelineType; + @ParcelableThisPlease @JsonField(name = "action", typeConverter = Action.TweetActionConverter.class) Action action; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java index 94f93b96f..9cfb9465d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseAppCompatActivity.java @@ -32,14 +32,19 @@ import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.iface.IControlBarActivity; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback; +import org.mariotaku.twidere.util.ActivityStack; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; +import org.mariotaku.twidere.util.ReadStateManager; import org.mariotaku.twidere.util.ThemeUtils; +import org.mariotaku.twidere.util.dagger.component.DaggerBaseAppCompatActivityComponent; import org.mariotaku.twidere.view.iface.IExtendedView.OnFitSystemWindowsListener; import java.util.ArrayList; +import javax.inject.Inject; + @SuppressLint("Registered") public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Constants, OnFitSystemWindowsListener, SystemWindowsInsetsCallback, IControlBarActivity, @@ -47,6 +52,12 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co // Utility classes private KeyboardShortcutsHandler mKeyboardShortcutsHandler; + @Inject + protected ActivityStack mActivityStack; + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + @Inject + protected ReadStateManager mReadStateManager; // Registered listeners private ArrayList mControlBarOffsetListeners = new ArrayList<>(); @@ -77,10 +88,6 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co return (TwidereApplication) getApplication(); } - public AsyncTwitterWrapper getTwitterWrapper() { - return getTwidereApplication() != null ? getTwidereApplication().getTwitterWrapper() : null; - } - public boolean isVisible() { return mIsVisible; } @@ -142,6 +149,7 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + DaggerBaseAppCompatActivityComponent.builder().applicationModule(TwidereApplication.getModule(this)).build().inject(this); mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler(); } @@ -149,6 +157,7 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co @Override protected void onStart() { super.onStart(); + mActivityStack.dispatchStart(this); mIsVisible = true; } @@ -177,6 +186,7 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co @Override protected void onStop() { mIsVisible = false; + mActivityStack.dispatchStop(this); super.onStop(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java index 2a8ce1d77..2ebdd497b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java @@ -115,7 +115,6 @@ import org.mariotaku.twidere.preference.ServicePickerPreference; import org.mariotaku.twidere.provider.TwidereDataStore.Drafts; import org.mariotaku.twidere.text.MarkForDeleteSpan; import org.mariotaku.twidere.util.AsyncTaskUtils; -import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.ContentValuesCreator; import org.mariotaku.twidere.util.EditTextEnterHandler; import org.mariotaku.twidere.util.EditTextEnterHandler.EnterListener; @@ -163,7 +162,6 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL // Utility classes private final Extractor mExtractor = new Extractor(); private TwidereValidator mValidator; - private AsyncTwitterWrapper mTwitterWrapper; private LocationManager mLocationManager; private SharedPreferencesWrapper mPreferences; private ContentResolver mResolver; @@ -589,7 +587,6 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL Context.MODE_PRIVATE, SharedPreferenceConstants.class); final TwidereApplication app = TwidereApplication.getInstance(this); - mTwitterWrapper = app.getTwitterWrapper(); mResolver = getContentResolver(); mValidator = new TwidereValidator(this); mImageLoader = app.getMediaLoaderWrapper(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java index 5e4be4620..97742f37b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java @@ -19,6 +19,7 @@ package org.mariotaku.twidere.activity.support; +import android.app.ActivityManager; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.SearchManager; @@ -85,7 +86,6 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Mentions; import org.mariotaku.twidere.provider.TwidereDataStore.Statuses; import org.mariotaku.twidere.service.StreamingService; import org.mariotaku.twidere.util.AsyncTaskUtils; -import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.CustomTabUtils; import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; @@ -128,6 +128,7 @@ import static org.mariotaku.twidere.util.Utils.showMenuItemToast; public class HomeActivity extends BaseAppCompatActivity implements OnClickListener, OnPageChangeListener, SupportFragmentCallback, OnLongClickListener { + private static final String EXTRA_SESSION_EVENT = "session_event"; private final Handler mHandler = new Handler(); private final ContentObserver mAccountChangeObserver = new AccountChangeObserver(this, mHandler); @@ -136,12 +137,10 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen private SharedPreferences mPreferences; - private AsyncTwitterWrapper mTwitterWrapper; private NotificationManager mNotificationManager; private MultiSelectEventHandler mMultiSelectHandler; - private ReadStateManager mReadStateManager; private SupportTabsAdapter mPagerAdapter; @@ -355,9 +354,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen return; } mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - mTwitterWrapper = getTwitterWrapper(); final TwidereApplication app = TwidereApplication.getInstance(this); - mReadStateManager = app.getReadStateManager(); mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mMultiSelectHandler = new MultiSelectEventHandler(this); mMultiSelectHandler.dispatchOnCreate(); @@ -431,6 +428,10 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen if (Utils.isStreamingEnabled()) { startService(new Intent(this, StreamingService.class)); } + + if (savedInstanceState != null) { + mSessionEvent = savedInstanceState.getParcelable(EXTRA_SESSION_EVENT); + } } @Override @@ -444,8 +445,9 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen assert bus != null; bus.register(this); // BEGIN HotMobi - final SessionEvent event = SessionEvent.create(this); - mSessionEvent = event; + if (mSessionEvent == null) { + mSessionEvent = SessionEvent.create(this); + } // END HotMobi mReadStateManager.registerOnSharedPreferenceChangeListener(mReadStateChangeListener); updateUnreadCount(); @@ -481,8 +483,11 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen // BEGIN HotMobi final SessionEvent event = mSessionEvent; - event.markEnd(); - HotMobiLogger.getInstance(this).log(event); + ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + if (event != null && isFinishing()) { + event.markEnd(); + HotMobiLogger.getInstance(this).log(event); + } // END HotMobi super.onStop(); } @@ -494,6 +499,12 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen public void notifyAccountsChanged() { } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putParcelable(EXTRA_SESSION_EVENT, mSessionEvent); + } + @Subscribe public void notifyTaskStateChanged(TaskStateChangedEvent event) { updateActionsButton(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java index c2905c7cf..f78f2c911 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ThemedFragmentActivity.java @@ -35,19 +35,25 @@ import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.activity.iface.IThemedActivity; import org.mariotaku.twidere.app.TwidereApplication; +import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; import org.mariotaku.twidere.util.StrictModeUtils; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory; import org.mariotaku.twidere.util.Utils; +import org.mariotaku.twidere.util.dagger.component.DaggerThemedFragmentActivityComponent; import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle; +import javax.inject.Inject; + public abstract class ThemedFragmentActivity extends FragmentActivity implements Constants, IThemedActivity, KeyboardShortcutCallback { // Utility classes private KeyboardShortcutsHandler mKeyboardShortcutsHandler; + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; // Data fields private int mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha; @@ -129,6 +135,7 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements StrictModeUtils.detectAllThreadPolicy(); } super.onCreate(savedInstanceState); + DaggerThemedFragmentActivityComponent.builder().applicationModule(TwidereApplication.getModule(this)).build().inject(this); mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsActivitiesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsActivitiesAdapter.java index 0aec7ce37..616a1f753 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsActivitiesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsActivitiesAdapter.java @@ -56,6 +56,8 @@ import org.mariotaku.twidere.view.holder.StatusViewHolder; import org.mariotaku.twidere.view.holder.StatusViewHolder.DummyStatusHolderAdapter; import org.mariotaku.twidere.view.holder.StatusViewHolder.StatusClickListener; +import javax.inject.Inject; + /** * Created by mariotaku on 15/1/3. */ @@ -72,7 +74,6 @@ public abstract class AbsActivitiesAdapter extends LoadMoreSupportAdapter< private final LayoutInflater mInflater; private final MediaLoaderWrapper mImageLoader; private final MediaLoadingHandler mLoadingHandler; - private final AsyncTwitterWrapper mTwitterWrapper; private final int mCardBackgroundColor; private final int mTextSize; private final int mProfileImageStyle, mMediaPreviewStyle, mLinkHighlightingStyle; @@ -86,13 +87,13 @@ public abstract class AbsActivitiesAdapter extends LoadMoreSupportAdapter< private ActivityAdapterListener mActivityAdapterListener; protected AbsActivitiesAdapter(final Context context, boolean compact) { + super(context); mContext = context; final TwidereApplication app = TwidereApplication.getInstance(context); mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context)); mInflater = LayoutInflater.from(context); mImageLoader = app.getMediaLoaderWrapper(); mLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress); - mTwitterWrapper = app.getTwitterWrapper(); mUserColorNameManager = app.getUserColorNameManager(); final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java index fc1caccfb..d45d28519 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AbsStatusesAdapter.java @@ -30,6 +30,8 @@ import org.mariotaku.twidere.view.holder.GapViewHolder; import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder; import org.mariotaku.twidere.view.holder.StatusViewHolder; +import javax.inject.Inject; + /** * Created by mariotaku on 14/11/19. */ @@ -42,7 +44,6 @@ public abstract class AbsStatusesAdapter extends LoadMoreSupportAdapter extends LoadMoreSupportAdapter extends LoadMoreSupportAdapter extends LoadMoreSupportAdapter implements Constants, IUserListsAdapter { @@ -53,20 +55,19 @@ public abstract class AbsUserListsAdapter extends LoadMoreSupportAdapter extends LoadMoreSupportAdapter implements Constants, IUsersAdapter { @@ -53,19 +55,18 @@ public abstract class AbsUsersAdapter extends LoadMoreSupportAdapter + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; + +import org.mariotaku.twidere.app.TwidereApplication; +import org.mariotaku.twidere.util.AsyncTwitterWrapper; +import org.mariotaku.twidere.util.ReadStateManager; +import org.mariotaku.twidere.util.dagger.component.DaggerBaseAdapterComponent; + +import javax.inject.Inject; + +/** + * Created by mariotaku on 15/10/5. + */ +public abstract class BaseAdapter extends RecyclerView.Adapter { + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + @Inject + protected ReadStateManager mReadStateManager; + + public BaseAdapter(Context context) { + //noinspection unchecked + DaggerBaseAdapterComponent.builder() + .applicationModule(TwidereApplication.getModule(context)) + .build() + .inject((BaseAdapter) this); + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/LoadMoreSupportAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/LoadMoreSupportAdapter.java index 1ac3bed6a..ba996b94d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/LoadMoreSupportAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/LoadMoreSupportAdapter.java @@ -19,6 +19,7 @@ package org.mariotaku.twidere.adapter; +import android.content.Context; import android.support.v7.widget.RecyclerView.Adapter; import android.support.v7.widget.RecyclerView.ViewHolder; @@ -27,12 +28,16 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter; /** * Created by mariotaku on 15/4/16. */ -public abstract class LoadMoreSupportAdapter extends Adapter +public abstract class LoadMoreSupportAdapter extends BaseAdapter implements ILoadMoreSupportAdapter { private boolean mLoadMoreSupported; private boolean mLoadMoreIndicatorVisible; + public LoadMoreSupportAdapter(Context context) { + super(context); + } + @Override public final boolean isLoadMoreIndicatorVisible() { return mLoadMoreIndicatorVisible; diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/MessageEntriesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/MessageEntriesAdapter.java index e9b4eadbd..4ca4b3381 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/MessageEntriesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/MessageEntriesAdapter.java @@ -24,7 +24,6 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.database.Cursor; import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView.Adapter; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.LayoutInflater; import android.view.View; @@ -48,6 +47,8 @@ import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder; import org.mariotaku.twidere.view.holder.MessageEntryViewHolder; +import javax.inject.Inject; + public class MessageEntriesAdapter extends LoadMoreSupportAdapter implements Constants, IContentCardAdapter, OnClickListener, OnReadStateChangeListener { @@ -61,10 +62,8 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter im private final int mTextSize; private final int mProfileImageStyle; private final int mMediaPreviewStyle; - private final ReadStateManager mReadStateManager; private final OnSharedPreferenceChangeListener mReadStateChangeListener; private UserColorNameManager mUserColorNameManager; - private final AsyncTwitterWrapper mTwitterWrapper; private final boolean mDisplayProfileImage; private boolean mShowAccountsColor; @@ -73,19 +72,18 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter im private StringLongPair[] mPositionPairs; public MessageEntriesAdapter(final Context context) { + super(context); mContext = context; mInflater = LayoutInflater.from(context); final TwidereApplication app = TwidereApplication.getInstance(context); mMultiSelectManager = app.getMultiSelectManager(); mImageLoader = app.getMediaLoaderWrapper(); - mTwitterWrapper = app.getTwitterWrapper(); final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null)); mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null)); mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true); mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size)); - mReadStateManager = app.getReadStateManager(); mUserColorNameManager = app.getUserColorNameManager(); mReadStateChangeListener = new OnSharedPreferenceChangeListener() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java b/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java index 7c4950914..e5267e5db 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java +++ b/twidere/src/main/java/org/mariotaku/twidere/app/TwidereApplication.java @@ -53,19 +53,18 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity; import org.mariotaku.twidere.service.RefreshService; import org.mariotaku.twidere.util.AbsLogger; import org.mariotaku.twidere.util.AsyncTaskManager; -import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.DebugModeUtils; import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.MathUtils; import org.mariotaku.twidere.util.MediaLoaderWrapper; import org.mariotaku.twidere.util.MultiSelectManager; -import org.mariotaku.twidere.util.ReadStateManager; import org.mariotaku.twidere.util.StrictModeUtils; import org.mariotaku.twidere.util.TwidereLogger; import org.mariotaku.twidere.util.UserColorNameManager; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.VideoLoader; import org.mariotaku.twidere.util.content.TwidereSQLiteOpenHelper; +import org.mariotaku.twidere.util.dagger.ApplicationModule; import org.mariotaku.twidere.util.imageloader.ReadOnlyDiskLRUNameCache; import org.mariotaku.twidere.util.imageloader.TwidereImageDownloader; import org.mariotaku.twidere.util.imageloader.URLFileNameGenerator; @@ -95,7 +94,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants private ImageLoader mImageLoader; private AsyncTaskManager mAsyncTaskManager; private SharedPreferences mPreferences; - private AsyncTwitterWrapper mTwitterWrapper; private MultiSelectManager mMultiSelectManager; private TwidereImageDownloader mImageDownloader, mFullImageDownloader; private DiskCache mDiskCache, mFullDiskCache; @@ -104,11 +102,11 @@ public class TwidereApplication extends MultiDexApplication implements Constants private SQLiteDatabase mDatabase; private Bus mMessageBus; private VideoLoader mVideoLoader; - private ReadStateManager mReadStateManager; private KeyboardShortcutsHandler mKeyboardShortcutsHandler; private UserColorNameManager mUserColorNameManager; private HotMobiLogger mHotMobiLogger; + private ApplicationModule mApplicationModule; @NonNull public static TwidereApplication getInstance(@NonNull final Context context) { @@ -149,11 +147,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants return mNetwork = new TwidereHostAddressResolver(this); } - public ReadStateManager getReadStateManager() { - if (mReadStateManager != null) return mReadStateManager; - return mReadStateManager = new ReadStateManager(this); - } - public KeyboardShortcutsHandler getKeyboardShortcutsHandler() { if (mKeyboardShortcutsHandler != null) return mKeyboardShortcutsHandler; mKeyboardShortcutsHandler = new KeyboardShortcutsHandler(this); @@ -217,11 +210,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants return mSQLiteOpenHelper = new TwidereSQLiteOpenHelper(this, DATABASES_NAME, DATABASES_VERSION); } - public AsyncTwitterWrapper getTwitterWrapper() { - if (mTwitterWrapper != null) return mTwitterWrapper; - return mTwitterWrapper = new AsyncTwitterWrapper(this); - } - @Override public void onCreate() { if (BuildConfig.DEBUG) { @@ -267,7 +255,9 @@ public class TwidereApplication extends MultiDexApplication implements Constants private void initBugReport() { final SharedPreferences preferences = getSharedPreferences(); if (!preferences.getBoolean(KEY_BUG_REPORTS, true)) return; - AbsLogger.setImplementation(new TwidereLogger()); + if (!BuildConfig.DEBUG) { + AbsLogger.setImplementation(new TwidereLogger()); + } AbsLogger.init(this); } @@ -355,4 +345,13 @@ public class TwidereApplication extends MultiDexApplication implements Constants if (mHotMobiLogger != null) return mHotMobiLogger; return mHotMobiLogger = new HotMobiLogger(this); } + + public static ApplicationModule getModule(Context context) { + return getInstance(context).getApplicationModule(); + } + + private ApplicationModule getApplicationModule() { + if (mApplicationModule != null) return mApplicationModule; + return mApplicationModule = new ApplicationModule(this); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFragment.java index 04778a121..5aee47e97 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseFragment.java @@ -23,6 +23,7 @@ import android.app.Activity; import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.ContentResolver; +import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; @@ -31,9 +32,21 @@ import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.MultiSelectManager; +import org.mariotaku.twidere.util.dagger.component.DaggerGeneralComponent; + +import javax.inject.Inject; public class BaseFragment extends Fragment implements Constants { + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + DaggerGeneralComponent.builder().applicationModule(TwidereApplication.getModule(context)).build().inject(this); + } + public TwidereApplication getApplication() { final Activity activity = getActivity(); if (activity != null) return (TwidereApplication) activity.getApplication(); @@ -63,11 +76,6 @@ public class BaseFragment extends Fragment implements Constants { return null; } - public AsyncTwitterWrapper getTwitterWrapper() { - final TwidereApplication app = getApplication(); - return app != null ? app.getTwitterWrapper() : null; - } - public void registerReceiver(final BroadcastReceiver receiver, final IntentFilter filter) { final Activity activity = getActivity(); if (activity == null) return; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseListFragment.java index 84f71ab68..6cd416fa0 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/BaseListFragment.java @@ -23,6 +23,7 @@ import android.app.Activity; import android.app.ListFragment; import android.content.BroadcastReceiver; import android.content.ContentResolver; +import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Bundle; @@ -36,6 +37,9 @@ import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.MultiSelectManager; import org.mariotaku.twidere.util.Utils; +import org.mariotaku.twidere.util.dagger.component.DaggerBaseListFragmentComponent; + +import javax.inject.Inject; public class BaseListFragment extends ListFragment implements Constants, OnScrollListener, RefreshScrollTopInterface { @@ -44,6 +48,7 @@ public class BaseListFragment extends ListFragment implements Constants, OnScrol private boolean mReachedBottom, mNotReachedBottomBefore = true; + public final TwidereApplication getApplication() { return TwidereApplication.getInstance(getActivity()); } @@ -75,10 +80,6 @@ public class BaseListFragment extends ListFragment implements Constants, OnScrol return args != null ? args.getInt(EXTRA_TAB_POSITION, -1) : -1; } - public AsyncTwitterWrapper getTwitterWrapper() { - return getApplication().getTwitterWrapper(); - } - public void invalidateOptionsMenu() { final Activity activity = getActivity(); if (activity == null) return; @@ -105,9 +106,13 @@ public class BaseListFragment extends ListFragment implements Constants, OnScrol lv.setOnScrollListener(this); } + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + @Override - public void onAttach(final Activity activity) { - super.onAttach(activity); + public void onAttach(Context context) { + super.onAttach(context); + DaggerBaseListFragmentComponent.builder().applicationModule(TwidereApplication.getModule(context)).build().inject(this); } @Override diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsActivitiesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsActivitiesFragment.java index e4caf2c08..b87180728 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsActivitiesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsActivitiesFragment.java @@ -147,7 +147,7 @@ public abstract class AbsActivitiesFragment extends AbsContentRecyclerView public boolean scrollToStart() { final boolean result = super.scrollToStart(); if (result) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; final int tabPosition = getTabPosition(); if (twitter != null && tabPosition != -1) { twitter.clearUnreadCountAsync(tabPosition); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java index ce6d4b3bc..b7a5ca536 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AbsStatusesFragment.java @@ -107,7 +107,6 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr }; private SharedPreferences mPreferences; private PopupMenu mPopupMenu; - private ReadStateManager mReadStateManager; private final OnScrollListener mOnScrollListener = new OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { @@ -130,7 +129,7 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr return true; } return Utils.handleMenuItemClick(getActivity(), AbsStatusesFragment.this, - getFragmentManager(), getTwitterWrapper(), status, item); + getFragmentManager(), mTwitterWrapper, status, item); } }; private OnScrollListener mPauseOnScrollListener; @@ -187,7 +186,7 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr return true; } case ACTION_STATUS_FAVORITE: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (status.is_favorite) { twitter.destroyFavoriteAsync(status.account_id, status.id); } else { @@ -348,7 +347,7 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr break; } case R.id.favorite_count: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return; if (status.is_favorite) { twitter.destroyFavoriteAsync(status.account_id, status.id); @@ -466,7 +465,6 @@ public abstract class AbsStatusesFragment extends AbsContentRecyclerViewFr @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - mReadStateManager = getReadStateManager(); final AbsStatusesAdapter adapter = getAdapter(); final RecyclerView recyclerView = getRecyclerView(); final LinearLayoutManager layoutManager = getLayoutManager(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddUserListMemberDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddUserListMemberDialogFragment.java index 84a4e9fcf..e43dde9b0 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddUserListMemberDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddUserListMemberDialogFragment.java @@ -52,7 +52,7 @@ public class AddUserListMemberDialogFragment extends BaseSupportDialogFragment i switch (which) { case DialogInterface.BUTTON_POSITIVE: { final String mText = ParseUtils.parseString(mEditText.getText()); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (mText == null || mText.length() <= 0 || twitter == null) return; twitter.addUserListMembersAsync(args.getLong(EXTRA_ACCOUNT_ID), args.getLong(EXTRA_LIST_ID)); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportDialogFragment.java index db8435dec..22c48a982 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportDialogFragment.java @@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment.support; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ContentResolver; +import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; import android.support.v4.app.DialogFragment; @@ -29,6 +30,9 @@ import android.support.v4.app.DialogFragment; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.util.AsyncTwitterWrapper; +import org.mariotaku.twidere.util.dagger.component.DaggerBaseSupportDialogFragmentComponent; + +import javax.inject.Inject; public class BaseSupportDialogFragment extends DialogFragment implements Constants { @@ -60,9 +64,13 @@ public class BaseSupportDialogFragment extends DialogFragment implements Constan return null; } - public AsyncTwitterWrapper getTwitterWrapper() { - final TwidereApplication app = getApplication(); - return app != null ? app.getTwitterWrapper() : null; + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + + @Override + public void onAttach(Context context) { + super.onAttach(context); + DaggerBaseSupportDialogFragmentComponent.builder().applicationModule(TwidereApplication.getModule(context)).build().inject(this); } public void registerReceiver(final BroadcastReceiver receiver, final IntentFilter filter) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportFragment.java index e12bb0384..c764f99af 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/BaseSupportFragment.java @@ -45,9 +45,21 @@ import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.MultiSelectManager; import org.mariotaku.twidere.util.ReadStateManager; import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory; +import org.mariotaku.twidere.util.dagger.component.DaggerGeneralComponent; + +import javax.inject.Inject; public class BaseSupportFragment extends Fragment implements IBaseFragment, Constants { + @Inject + protected AsyncTwitterWrapper mTwitterWrapper; + @Inject + protected ReadStateManager mReadStateManager; + + public BaseSupportFragment() { + + } + @Override public final void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -55,10 +67,13 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons requestFitSystemWindows(); } - public BaseSupportFragment() { - + @Override + public void onAttach(Context context) { + super.onAttach(context); + DaggerGeneralComponent.builder().applicationModule(TwidereApplication.getModule(context)).build().inject(this); } + public TwidereApplication getApplication() { final Activity activity = getActivity(); if (activity != null) return (TwidereApplication) activity.getApplication(); @@ -87,13 +102,6 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons return null; } - public AsyncTwitterWrapper getTwitterWrapper() { - return getApplication() != null ? getApplication().getTwitterWrapper() : null; - } - - public ReadStateManager getReadStateManager() { - return getApplication() != null ? getApplication().getReadStateManager() : null; - } public void invalidateOptionsMenu() { final FragmentActivity activity = getActivity(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserBlockDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserBlockDialogFragment.java index e88e4779f..1f0713e63 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserBlockDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserBlockDialogFragment.java @@ -19,7 +19,6 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; @@ -27,6 +26,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.constant.SharedPreferenceConstants; @@ -45,7 +45,7 @@ public class CreateUserBlockDialogFragment extends BaseSupportDialogFragment imp switch (which) { case DialogInterface.BUTTON_POSITIVE: final ParcelableUser user = getUser(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (user == null || twitter == null) return; twitter.createBlockAsync(user.account_id, user.id); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserListDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserListDialogFragment.java index 002e5bbf3..1423f0b66 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserListDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserListDialogFragment.java @@ -19,12 +19,12 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; @@ -33,7 +33,6 @@ import com.rengwuxian.materialedittext.MaterialEditText; import org.mariotaku.twidere.R; import org.mariotaku.twidere.text.validator.UserListNameValidator; -import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; @@ -45,7 +44,6 @@ public class CreateUserListDialogFragment extends BaseSupportDialogFragment impl private long mAccountId; private long mListId; private boolean mIsPublic = true; - private AsyncTwitterWrapper mTwitterWrapper; @Override public void onClick(final DialogInterface dialog, final int which) { @@ -66,7 +64,6 @@ public class CreateUserListDialogFragment extends BaseSupportDialogFragment impl @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { - mTwitterWrapper = getApplication().getTwitterWrapper(); final Bundle bundle = savedInstanceState == null ? getArguments() : savedInstanceState; mAccountId = bundle != null ? bundle.getLong(EXTRA_ACCOUNT_ID, -1) : -1; final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserMuteDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserMuteDialogFragment.java index 8b450ba5f..282d29157 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserMuteDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/CreateUserMuteDialogFragment.java @@ -19,7 +19,6 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; @@ -27,6 +26,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.constant.SharedPreferenceConstants; @@ -45,7 +45,7 @@ public class CreateUserMuteDialogFragment extends BaseSupportDialogFragment impl switch (which) { case DialogInterface.BUTTON_POSITIVE: final ParcelableUser user = getUser(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (user == null || twitter == null) return; twitter.createMuteAsync(user.account_id, user.id); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DeleteUserListMembersDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DeleteUserListMembersDialogFragment.java index e6d0250fc..f9e2a2722 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DeleteUserListMembersDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DeleteUserListMembersDialogFragment.java @@ -50,7 +50,7 @@ public class DeleteUserListMembersDialogFragment extends BaseSupportDialogFragme case DialogInterface.BUTTON_POSITIVE: final ParcelableUser[] users = getUsers(); final ParcelableUserList userList = getUserList(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (users == null || userList == null || twitter == null) return; twitter.deleteUserListMembersAsync(userList.account_id, userList.id, users); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyFriendshipDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyFriendshipDialogFragment.java index bc1d4d994..f38f9da50 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyFriendshipDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyFriendshipDialogFragment.java @@ -46,7 +46,7 @@ public class DestroyFriendshipDialogFragment extends BaseSupportDialogFragment i switch (which) { case DialogInterface.BUTTON_POSITIVE: final ParcelableUser user = getUser(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (user == null || twitter == null) return; twitter.destroyFriendshipAsync(user.account_id, user.id); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroySavedSearchDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroySavedSearchDialogFragment.java index 9e29637ea..71b8f198c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroySavedSearchDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroySavedSearchDialogFragment.java @@ -19,80 +19,80 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.ThemeUtils; public class DestroySavedSearchDialogFragment extends BaseSupportDialogFragment implements - DialogInterface.OnClickListener { + DialogInterface.OnClickListener { - public static final String FRAGMENT_TAG = "destroy_saved_search"; + public static final String FRAGMENT_TAG = "destroy_saved_search"; - @Override - public void onClick(final DialogInterface dialog, final int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - final long accountId = getAccountId(); - final int searchId = getSearchId(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - if (searchId <= 0 || twitter == null) return; - twitter.destroySavedSearchAsync(accountId, searchId); - break; - default: - break; - } - } - - @NonNull @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - final String name = getSearchName(); - if (name != null) { - builder.setTitle(getString(R.string.destroy_saved_search, name)); - builder.setMessage(getString(R.string.destroy_saved_search_confirm_message, name)); - } - builder.setPositiveButton(android.R.string.ok, this); - builder.setNegativeButton(android.R.string.cancel, null); - return builder.create(); - } + public void onClick(final DialogInterface dialog, final int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + final long accountId = getAccountId(); + final int searchId = getSearchId(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; + if (searchId <= 0 || twitter == null) return; + twitter.destroySavedSearchAsync(accountId, searchId); + break; + default: + break; + } + } - private long getAccountId() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_ACCOUNT_ID)) return -1; - return args.getLong(EXTRA_ACCOUNT_ID); - } + @NonNull + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + final String name = getSearchName(); + if (name != null) { + builder.setTitle(getString(R.string.destroy_saved_search, name)); + builder.setMessage(getString(R.string.destroy_saved_search_confirm_message, name)); + } + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, null); + return builder.create(); + } - private int getSearchId() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_SEARCH_ID)) return -1; - return args.getInt(EXTRA_SEARCH_ID); - } + private long getAccountId() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_ACCOUNT_ID)) return -1; + return args.getLong(EXTRA_ACCOUNT_ID); + } - private String getSearchName() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_NAME)) return null; - return args.getString(EXTRA_NAME); - } + private int getSearchId() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_SEARCH_ID)) return -1; + return args.getInt(EXTRA_SEARCH_ID); + } - public static DestroySavedSearchDialogFragment show(final FragmentManager fm, final long accountId, - final int searchId, final String name) { - final Bundle args = new Bundle(); - args.putLong(EXTRA_ACCOUNT_ID, accountId); - args.putInt(EXTRA_SEARCH_ID, searchId); - args.putString(EXTRA_NAME, name); - final DestroySavedSearchDialogFragment f = new DestroySavedSearchDialogFragment(); - f.setArguments(args); - f.show(fm, FRAGMENT_TAG); - return f; - } + private String getSearchName() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_NAME)) return null; + return args.getString(EXTRA_NAME); + } + + public static DestroySavedSearchDialogFragment show(final FragmentManager fm, final long accountId, + final int searchId, final String name) { + final Bundle args = new Bundle(); + args.putLong(EXTRA_ACCOUNT_ID, accountId); + args.putInt(EXTRA_SEARCH_ID, searchId); + args.putString(EXTRA_NAME, name); + final DestroySavedSearchDialogFragment f = new DestroySavedSearchDialogFragment(); + f.setArguments(args); + f.show(fm, FRAGMENT_TAG); + return f; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyStatusDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyStatusDialogFragment.java index a7feb5a3e..5a5cfc4f8 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyStatusDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyStatusDialogFragment.java @@ -19,13 +19,13 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.model.ParcelableStatus; @@ -34,46 +34,46 @@ import org.mariotaku.twidere.util.ThemeUtils; public class DestroyStatusDialogFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener { - public static final String FRAGMENT_TAG = "destroy_status"; + public static final String FRAGMENT_TAG = "destroy_status"; - @Override - public void onClick(final DialogInterface dialog, final int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - final ParcelableStatus status = getStatus(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - if (status == null || twitter == null) return; - twitter.destroyStatusAsync(status.account_id, status.id); - break; - default: - break; - } - } - - @NonNull @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - builder.setTitle(R.string.destroy_status); - builder.setMessage(R.string.destroy_status_confirm_message); - builder.setPositiveButton(android.R.string.ok, this); - builder.setNegativeButton(android.R.string.cancel, null); - return builder.create(); - } + public void onClick(final DialogInterface dialog, final int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + final ParcelableStatus status = getStatus(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; + if (status == null || twitter == null) return; + twitter.destroyStatusAsync(status.account_id, status.id); + break; + default: + break; + } + } - private ParcelableStatus getStatus() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_STATUS)) return null; - return args.getParcelable(EXTRA_STATUS); - } + @NonNull + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + builder.setTitle(R.string.destroy_status); + builder.setMessage(R.string.destroy_status_confirm_message); + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, null); + return builder.create(); + } - public static DestroyStatusDialogFragment show(final FragmentManager fm, final ParcelableStatus status) { - final Bundle args = new Bundle(); - args.putParcelable(EXTRA_STATUS, status); - final DestroyStatusDialogFragment f = new DestroyStatusDialogFragment(); - f.setArguments(args); - f.show(fm, FRAGMENT_TAG); - return f; - } + private ParcelableStatus getStatus() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_STATUS)) return null; + return args.getParcelable(EXTRA_STATUS); + } + + public static DestroyStatusDialogFragment show(final FragmentManager fm, final ParcelableStatus status) { + final Bundle args = new Bundle(); + args.putParcelable(EXTRA_STATUS, status); + final DestroyStatusDialogFragment f = new DestroyStatusDialogFragment(); + f.setArguments(args); + f.show(fm, FRAGMENT_TAG); + return f; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListDialogFragment.java index f12bbcf8a..bc2deef61 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListDialogFragment.java @@ -19,13 +19,13 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.model.ParcelableUserList; @@ -34,49 +34,49 @@ import org.mariotaku.twidere.util.ThemeUtils; public class DestroyUserListDialogFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener { - public static final String FRAGMENT_TAG = "destroy_user_list"; + public static final String FRAGMENT_TAG = "destroy_user_list"; - @Override - public void onClick(final DialogInterface dialog, final int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - final ParcelableUserList user_list = getUserList(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - if (user_list == null || twitter == null) return; - twitter.destroyUserListAsync(user_list.account_id, user_list.id); - break; - default: - break; - } - } - - @NonNull @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - final ParcelableUserList userList = getUserList(); - if (userList != null) { - builder.setTitle(getString(R.string.delete_user_list, userList.name)); - builder.setMessage(getString(R.string.delete_user_list_confirm_message, userList.name)); - } - builder.setPositiveButton(android.R.string.ok, this); - builder.setNegativeButton(android.R.string.cancel, null); - return builder.create(); - } + public void onClick(final DialogInterface dialog, final int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + final ParcelableUserList user_list = getUserList(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; + if (user_list == null || twitter == null) return; + twitter.destroyUserListAsync(user_list.account_id, user_list.id); + break; + default: + break; + } + } - private ParcelableUserList getUserList() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_USER_LIST)) return null; - return args.getParcelable(EXTRA_USER_LIST); - } + @NonNull + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + final ParcelableUserList userList = getUserList(); + if (userList != null) { + builder.setTitle(getString(R.string.delete_user_list, userList.name)); + builder.setMessage(getString(R.string.delete_user_list_confirm_message, userList.name)); + } + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, null); + return builder.create(); + } - public static DestroyUserListDialogFragment show(final FragmentManager fm, final ParcelableUserList user_list) { - final Bundle args = new Bundle(); - args.putParcelable(EXTRA_USER_LIST, user_list); - final DestroyUserListDialogFragment f = new DestroyUserListDialogFragment(); - f.setArguments(args); - f.show(fm, FRAGMENT_TAG); - return f; - } + private ParcelableUserList getUserList() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_USER_LIST)) return null; + return args.getParcelable(EXTRA_USER_LIST); + } + + public static DestroyUserListDialogFragment show(final FragmentManager fm, final ParcelableUserList user_list) { + final Bundle args = new Bundle(); + args.putParcelable(EXTRA_USER_LIST, user_list); + final DestroyUserListDialogFragment f = new DestroyUserListDialogFragment(); + f.setArguments(args); + f.show(fm, FRAGMENT_TAG); + return f; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListSubscriptionDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListSubscriptionDialogFragment.java index 5092ef88c..02b82351b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListSubscriptionDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DestroyUserListSubscriptionDialogFragment.java @@ -19,13 +19,13 @@ package org.mariotaku.twidere.fragment.support; -import android.support.v7.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; +import android.support.v7.app.AlertDialog; import org.mariotaku.twidere.R; import org.mariotaku.twidere.model.ParcelableUserList; @@ -33,52 +33,52 @@ import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.ThemeUtils; public class DestroyUserListSubscriptionDialogFragment extends BaseSupportDialogFragment implements - DialogInterface.OnClickListener { + DialogInterface.OnClickListener { - public static final String FRAGMENT_TAG = "destroy_user_list"; + public static final String FRAGMENT_TAG = "destroy_user_list"; - @Override - public void onClick(final DialogInterface dialog, final int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - final ParcelableUserList user_list = getUserList(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - if (user_list == null || twitter == null) return; - twitter.destroyUserListSubscriptionAsync(user_list.account_id, user_list.id); - break; - default: - break; - } - } - - @NonNull @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - final ParcelableUserList userList = getUserList(); - if (userList != null) { - builder.setTitle(getString(R.string.unsubscribe_from_user_list, userList.name)); - builder.setMessage(getString(R.string.unsubscribe_from_user_list_confirm_message, userList.name)); - } - builder.setPositiveButton(android.R.string.ok, this); - builder.setNegativeButton(android.R.string.cancel, null); - return builder.create(); - } + public void onClick(final DialogInterface dialog, final int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + final ParcelableUserList user_list = getUserList(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; + if (user_list == null || twitter == null) return; + twitter.destroyUserListSubscriptionAsync(user_list.account_id, user_list.id); + break; + default: + break; + } + } - private ParcelableUserList getUserList() { - final Bundle args = getArguments(); - if (!args.containsKey(EXTRA_USER_LIST)) return null; - return args.getParcelable(EXTRA_USER_LIST); - } + @NonNull + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + final ParcelableUserList userList = getUserList(); + if (userList != null) { + builder.setTitle(getString(R.string.unsubscribe_from_user_list, userList.name)); + builder.setMessage(getString(R.string.unsubscribe_from_user_list_confirm_message, userList.name)); + } + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, null); + return builder.create(); + } - public static DestroyUserListSubscriptionDialogFragment show(final FragmentManager fm, - final ParcelableUserList userList) { - final Bundle args = new Bundle(); - args.putParcelable(EXTRA_USER_LIST, userList); - final DestroyUserListSubscriptionDialogFragment f = new DestroyUserListSubscriptionDialogFragment(); - f.setArguments(args); - f.show(fm, FRAGMENT_TAG); - return f; - } + private ParcelableUserList getUserList() { + final Bundle args = getArguments(); + if (!args.containsKey(EXTRA_USER_LIST)) return null; + return args.getParcelable(EXTRA_USER_LIST); + } + + public static DestroyUserListSubscriptionDialogFragment show(final FragmentManager fm, + final ParcelableUserList userList) { + final Bundle args = new Bundle(); + args.putParcelable(EXTRA_USER_LIST, userList); + final DestroyUserListSubscriptionDialogFragment f = new DestroyUserListSubscriptionDialogFragment(); + f.setArguments(args); + f.show(fm, FRAGMENT_TAG); + return f; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java index be790da8b..c1d85f0c4 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/DirectMessagesFragment.java @@ -111,7 +111,7 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment= 0) { twitter.clearUnreadCountAsync(tabPosition); @@ -232,7 +232,7 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment list) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return false; for (final DraftItem item : list) { if (item.action_type == Drafts.ACTION_UPDATE_STATUS || item.action_type <= 0) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/HomeTimelineFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/HomeTimelineFragment.java index 1c8239787..b533da7cd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/HomeTimelineFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/HomeTimelineFragment.java @@ -49,20 +49,20 @@ public class HomeTimelineFragment extends CursorStatusesFragment { @Override protected void updateRefreshState() { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return; setRefreshing(twitter.isHomeTimelineRefreshing()); } @Override public boolean isRefreshing() { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; return twitter != null && twitter.isHomeTimelineRefreshing(); } @Override public boolean getStatuses(long[] accountIds, long[] maxIds, long[] sinceIds) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return false; if (maxIds == null) return twitter.refreshAll(accountIds); return twitter.getHomeTimelineAsync(accountIds, maxIds, sinceIds); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MentionsTimelineFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MentionsTimelineFragment.java index 1da66f7ac..951a40ce3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MentionsTimelineFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MentionsTimelineFragment.java @@ -49,7 +49,7 @@ public class MentionsTimelineFragment extends CursorStatusesFragment { @Override public boolean isRefreshing() { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; return twitter != null && twitter.isMentionsTimelineRefreshing(); } @@ -65,14 +65,14 @@ public class MentionsTimelineFragment extends CursorStatusesFragment { @Override protected void updateRefreshState() { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return; setRefreshing(twitter.isMentionsTimelineRefreshing()); } @Override public boolean getStatuses(long[] accountIds, long[] maxIds, long[] sinceIds) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return false; return twitter.getMentionsTimelineAsync(accountIds, maxIds, sinceIds); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MessagesConversationFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MessagesConversationFragment.java index 1aee42a0e..0b1b61e29 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MessagesConversationFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/MessagesConversationFragment.java @@ -165,10 +165,8 @@ public class MessagesConversationFragment extends BaseSupportFragment implements // Utility classes private TwidereValidator mValidator; - private AsyncTwitterWrapper mTwitterWrapper; private SharedPreferencesWrapper mPreferences; private SharedPreferences mMessageDrafts; - private ReadStateManager mReadStateManager; private MediaLoaderWrapper mImageLoader; private UserColorNameManager mUserColorNameManager; private EffectViewHelper mEffectHelper; @@ -239,8 +237,6 @@ public class MessagesConversationFragment extends BaseSupportFragment implements mUserColorNameManager = UserColorNameManager.getInstance(activity); mMessageDrafts = getSharedPreferences(MESSAGE_DRAFTS_PREFERENCES_NAME, Context.MODE_PRIVATE); mImageLoader = TwidereApplication.getInstance(activity).getMediaLoaderWrapper(); - mReadStateManager = getReadStateManager(); - mTwitterWrapper = getTwitterWrapper(); mValidator = new TwidereValidator(activity); final View view = getView(); @@ -891,13 +887,16 @@ public class MessagesConversationFragment extends BaseSupportFragment implements return builder.create(); } + @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: { - final ParcelableCredentials account = getArguments().getParcelable(EXTRA_ACCOUNT); - final ParcelableUser user = getArguments().getParcelable(EXTRA_USER); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final Bundle args = getArguments(); + final ParcelableCredentials account = args.getParcelable(EXTRA_ACCOUNT); + final ParcelableUser user = args.getParcelable(EXTRA_USER); + if (account == null || user == null) return; + final AsyncTwitterWrapper twitter = mTwitterWrapper; twitter.destroyMessageConversationAsync(account.account_id, user.id); break; } @@ -905,15 +904,15 @@ public class MessagesConversationFragment extends BaseSupportFragment implements } } - private static class SetReadStateTask extends AsyncTask { + static class SetReadStateTask extends AsyncTask { private final Context mContext; private final ReadStateManager mReadStateManager; private final ParcelableCredentials mAccount; private final ParcelableUser mRecipient; public SetReadStateTask(Context context, ParcelableCredentials account, ParcelableUser recipient) { + mReadStateManager = TwidereApplication.getModule(context).getReadStateManager(); mContext = context; - mReadStateManager = TwidereApplication.getInstance(context).getReadStateManager(); mAccount = account; mRecipient = recipient; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ReportSpamDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ReportSpamDialogFragment.java index 423804eb4..4a9c6db7c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ReportSpamDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ReportSpamDialogFragment.java @@ -45,7 +45,7 @@ public class ReportSpamDialogFragment extends BaseSupportDialogFragment implemen switch (which) { case DialogInterface.BUTTON_POSITIVE: final ParcelableUser user = getUser(); - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (user == null || twitter == null) return; twitter.reportSpamAsync(user.account_id, user.id); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/RetweetQuoteDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/RetweetQuoteDialogFragment.java index 0eea13190..8a4fc49e9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/RetweetQuoteDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/RetweetQuoteDialogFragment.java @@ -38,6 +38,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; +import android.widget.EditText; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; @@ -51,6 +52,7 @@ import org.mariotaku.twidere.util.SharedPreferencesWrapper; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereValidator; import org.mariotaku.twidere.view.ComposeMaterialEditText; +import org.mariotaku.twidere.view.StatusTextCountView; import org.mariotaku.twidere.view.holder.StatusViewHolder; import org.mariotaku.twidere.view.holder.StatusViewHolder.DummyStatusHolderAdapter; @@ -60,9 +62,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem Constants, DialogInterface.OnClickListener { public static final String FRAGMENT_TAG = "retweet_quote"; - private ComposeMaterialEditText mEditComment; private PopupMenu mPopupMenu; - private View mCommentMenu; private TwidereValidator mValidator; private SharedPreferencesWrapper mPreferences; @@ -72,7 +72,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem if (status == null) return; switch (which) { case DialogInterface.BUTTON_POSITIVE: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return; retweetOrQuote(twitter, status); break; @@ -124,24 +124,14 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem view.findViewById(R.id.action_buttons).setVisibility(View.GONE); view.findViewById(R.id.item_content).setFocusable(false); view.findViewById(R.id.comment_container).setVisibility(status.user_is_protected ? View.GONE : View.VISIBLE); - mEditComment = (ComposeMaterialEditText) view.findViewById(R.id.edit_comment); + final ComposeMaterialEditText mEditComment = (ComposeMaterialEditText) view.findViewById(R.id.edit_comment); mEditComment.setAccountId(status.account_id); -// mEditComment.setLengthChecker(new METLengthChecker() { -// -// final String statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.quote_id).toString(); -// -// @Override -// public int getLength(CharSequence text) { -// return mValidator.getTweetLength(text + " " + statusLink); -// } -// }); -// mEditComment.setMaxCharacters(mValidator.getMaxTweetLength()); final boolean sendByEnter = mPreferences.getBoolean(KEY_QUICK_SEND); final EditTextEnterHandler enterHandler = EditTextEnterHandler.attach(mEditComment, new EditTextEnterHandler.EnterListener() { @Override public void onHitEnter() { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; final ParcelableStatus status = getStatus(); if (twitter == null || status == null) return; retweetOrQuote(twitter, status); @@ -156,11 +146,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - final Dialog dialog = getDialog(); - if (!(dialog instanceof AlertDialog)) return; - final Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE); - if (positiveButton == null) return; - positiveButton.setText(s.length() > 0 ? R.string.comment : R.string.retweet); + updateTextCount(getDialog(), s, status); } @Override @@ -168,17 +154,17 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem } }); - mCommentMenu = view.findViewById(R.id.comment_menu); + final View commentMenu = view.findViewById(R.id.comment_menu); - mPopupMenu = new PopupMenu(context, mCommentMenu, Gravity.NO_GRAVITY, + mPopupMenu = new PopupMenu(context, commentMenu, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0); - mCommentMenu.setOnClickListener(new View.OnClickListener() { + commentMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopupMenu.show(); } }); - mCommentMenu.setOnTouchListener(mPopupMenu.getDragToOpenListener()); + commentMenu.setOnTouchListener(mPopupMenu.getDragToOpenListener()); mPopupMenu.inflate(R.menu.menu_dialog_comment); final Menu menu = mPopupMenu.getMenu(); MenuUtils.setMenuItemAvailability(menu, R.id.quote_original_status, @@ -194,7 +180,25 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem } }); - return builder.create(); + final Dialog dialog = builder.create(); + dialog.setOnShowListener(new DialogInterface.OnShowListener() { + @Override + public void onShow(DialogInterface dialog) { + updateTextCount(dialog, mEditComment.getText(), status); + } + }); + return dialog; + } + + private void updateTextCount(DialogInterface dialog, CharSequence s, ParcelableStatus status) { + if (!(dialog instanceof AlertDialog)) return; + final AlertDialog alertDialog = (AlertDialog) dialog; + final Button positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + if (positiveButton == null) return; + positiveButton.setText(s.length() > 0 ? R.string.comment : R.string.retweet); + final String statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.id).toString(); + final StatusTextCountView textCountView = (StatusTextCountView) alertDialog.findViewById(R.id.comment_text_count); + textCountView.setTextCount(mValidator.getTweetLength(s + " " + statusLink)); } private ParcelableStatus getStatus() { @@ -204,7 +208,10 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem } private void retweetOrQuote(AsyncTwitterWrapper twitter, ParcelableStatus status) { - if (mEditComment.length() > 0) { + final Dialog dialog = getDialog(); + if (dialog == null) return; + final EditText editComment = ((EditText) dialog.findViewById(R.id.edit_comment)); + if (editComment.length() > 0) { final Menu menu = mPopupMenu.getMenu(); final MenuItem quoteOriginalStatus = menu.findItem(R.id.quote_original_status); final MenuItem linkToQuotedStatus = menu.findItem(R.id.link_to_quoted_status); @@ -217,7 +224,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem inReplyToStatusId = status.quoted_id; statusLink = LinkCreator.getTwitterStatusLink(status.quoted_user_screen_name, status.quoted_id); } - final String commentText = mEditComment.getText() + " " + statusLink; + final String commentText = editComment.getText() + " " + statusLink; twitter.updateStatusAsync(new long[]{status.account_id}, commentText, null, null, linkToQuotedStatus.isChecked() ? inReplyToStatusId : -1, status.is_possibly_sensitive); } else if (isMyRetweet(status)) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ScheduledStatusesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ScheduledStatusesFragment.java index d0cdfaf55..d98db1169 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ScheduledStatusesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/ScheduledStatusesFragment.java @@ -94,6 +94,7 @@ public class ScheduledStatusesFragment extends AbsContentRecyclerViewFragment mData; public ScheduledStatusesAdapter(Context context) { + super(context); mContext = context; mInflater = LayoutInflater.from(context); setLoadMoreSupported(false); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java index bd00d513c..1bdceb057 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/SearchFragment.java @@ -227,7 +227,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.save: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; final Bundle args = getArguments(); if (twitter != null && args != null) { twitter.createSavedSearchAsync(getAccountId(), getQuery()); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java index 59ce0b3cb..64ab8c3d8 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java @@ -200,7 +200,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac final ParcelableStatus status = mSelectedStatus; if (status == null) return false; return Utils.handleMenuItemClick(getActivity(), StatusFragment.this, - getFragmentManager(), getTwitterWrapper(), status, item); + getFragmentManager(), mTwitterWrapper, status, item); } }; @@ -322,7 +322,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac break; } case R.id.favorite_count: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (twitter == null) return; if (status.is_favorite) { twitter.destroyFavoriteAsync(status.account_id, status.id); @@ -412,7 +412,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac return true; } case ACTION_STATUS_FAVORITE: { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final AsyncTwitterWrapper twitter = mTwitterWrapper; if (status.is_favorite) { twitter.destroyFavoriteAsync(status.account_id, status.id); } else { @@ -875,7 +875,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac final StatusFragment fragment = adapter.getFragment(); final ParcelableStatus status = adapter.getStatus(layoutPosition); if (status == null || fragment == null) return false; - final AsyncTwitterWrapper twitter = fragment.getTwitterWrapper(); + final AsyncTwitterWrapper twitter = fragment.mTwitterWrapper; final FragmentActivity activity = fragment.getActivity(); final FragmentManager fm = fragment.getFragmentManager(); if (item.getItemId() == R.id.retweet) { @@ -1158,7 +1158,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac @NonNull @Override public AsyncTwitterWrapper getTwitterWrapper() { - return mFragment.getTwitterWrapper(); + return mFragment.mTwitterWrapper; } @Override @@ -1458,7 +1458,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac public long getItemId(int position) { final ParcelableStatus status = getStatus(position); if (status != null) return status.id; - return getItemType(position) * 100 + position; + return getItemType(position); } @Override diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggestionsFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggestionsFragment.java index 0600e3f3e..176ca3665 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggestionsFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/TrendsSuggestionsFragment.java @@ -109,7 +109,7 @@ public class TrendsSuggestionsFragment extends AbsContentListViewFragment> result = updateStatus(builder, item); boolean failed = false; diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java b/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java index 58c2cf62a..d9aa2cf94 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java +++ b/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java @@ -39,9 +39,12 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Statuses; import org.mariotaku.twidere.receiver.PowerStateReceiver; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.SharedPreferencesWrapper; +import org.mariotaku.twidere.util.dagger.component.DaggerRefreshServiceComponent; import java.util.Arrays; +import javax.inject.Inject; + import edu.tsinghua.hotmobi.HotMobiLogger; import static org.mariotaku.twidere.util.ParseUtils.parseInt; @@ -59,7 +62,8 @@ public class RefreshService extends Service implements Constants { private SharedPreferencesWrapper mPreferences; private AlarmManager mAlarmManager; - private AsyncTwitterWrapper mTwitterWrapper; + @Inject + AsyncTwitterWrapper mTwitterWrapper; private PendingIntent mPendingRefreshHomeTimelineIntent, mPendingRefreshMentionsIntent, mPendingRefreshDirectMessagesIntent, mPendingRefreshTrendsIntent; @@ -148,9 +152,9 @@ public class RefreshService extends Service implements Constants { @Override public void onCreate() { super.onCreate(); + DaggerRefreshServiceComponent.builder().applicationModule(TwidereApplication.getModule(this)).build().inject(this); mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); final TwidereApplication app = TwidereApplication.getInstance(this); - mTwitterWrapper = app.getTwitterWrapper(); mPreferences = SharedPreferencesWrapper.getInstance(app, SHARED_PREFERENCES_NAME, MODE_PRIVATE); mPendingRefreshHomeTimelineIntent = PendingIntent.getBroadcast(this, 0, new Intent( BROADCAST_REFRESH_HOME_TIMELINE), 0); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ActivityStack.java b/twidere/src/main/java/org/mariotaku/twidere/util/ActivityStack.java new file mode 100644 index 000000000..f7113867b --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ActivityStack.java @@ -0,0 +1,51 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util; + + +import android.app.Activity; + +import java.util.HashSet; + +/** + * Created by mariotaku on 15/10/5. + */ +public class ActivityStack { + + private final HashSet mInternalStack = new HashSet<>(); + + public void dispatchStart(Activity activity) { + mInternalStack.add(System.identityHashCode(activity)); + } + + public void dispatchStop(Activity activity) { + mInternalStack.remove(System.identityHashCode(activity)); + } + + public int size() { + return mInternalStack.size(); + } + + public boolean isEmpty() { + return mInternalStack.isEmpty(); + } + + +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java index 7a2da247b..f419a3901 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java @@ -286,11 +286,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper { return true; } - public static AsyncTwitterWrapper getInstance(final Context context) { - final TwidereApplication application = TwidereApplication.getInstance(context); - return application.getTwitterWrapper(); - } - public int getLocalTrendsAsync(final long accountId, final int woeid) { mAsyncTaskManager.cancel(mGetLocalTrendsTaskId); final GetLocalTrendsTask task = new GetLocalTrendsTask(accountId, woeid); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java index 64dca9106..116a67453 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java @@ -40,6 +40,7 @@ import org.mariotaku.twidere.model.ParcelableAccount; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.provider.TwidereDataStore.Filters; +import org.mariotaku.twidere.util.dagger.component.DaggerGeneralComponent; import java.util.ArrayList; import java.util.Arrays; @@ -49,6 +50,8 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; +import javax.inject.Inject; + import static org.mariotaku.twidere.util.Utils.getAccountScreenNames; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert; @@ -58,7 +61,8 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback, private TwidereApplication mApplication; - private AsyncTwitterWrapper mTwitterWrapper; + @Inject + AsyncTwitterWrapper mTwitterWrapper; private MultiSelectManager mMultiSelectManager; @@ -71,6 +75,7 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback, public static final int MENU_GROUP = 201; public MultiSelectEventHandler(final BaseAppCompatActivity activity) { + DaggerGeneralComponent.builder().applicationModule(TwidereApplication.getModule(activity)).build().inject(this); mActivity = activity; } @@ -79,7 +84,6 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback, */ public void dispatchOnCreate() { mApplication = mActivity.getTwidereApplication(); - mTwitterWrapper = mApplication.getTwitterWrapper(); mMultiSelectManager = mApplication.getMultiSelectManager(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java index cd68b60b5..1b5170856 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -3362,9 +3362,6 @@ public final class Utils implements Constants { private static boolean isMyStatus(ParcelableStatus status) { if (isMyRetweet(status)) return true; - if (status.is_quote) { - return status.account_id == status.quoted_user_id; - } return status.account_id == status.user_id; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/ApplicationModule.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/ApplicationModule.java new file mode 100644 index 000000000..bdbad42f2 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/ApplicationModule.java @@ -0,0 +1,72 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger; + +import org.mariotaku.twidere.app.TwidereApplication; +import org.mariotaku.twidere.util.ActivityStack; +import org.mariotaku.twidere.util.AsyncTwitterWrapper; +import org.mariotaku.twidere.util.ReadStateManager; + +import dagger.Module; +import dagger.Provides; + +/** + * Created by mariotaku on 15/10/5. + */ +@Module +public class ApplicationModule { + + private final ActivityStack activityStack; + private final AsyncTwitterWrapper asyncTwitterWrapper; + private final ReadStateManager readStateManager; + + public ApplicationModule(TwidereApplication application) { + activityStack = new ActivityStack(); + asyncTwitterWrapper = new AsyncTwitterWrapper(application); + readStateManager = new ReadStateManager(application); + } + + @Provides + ActivityStack provideActivityStack() { + return activityStack; + } + + @Provides + AsyncTwitterWrapper provideAsyncTwitterWrapper() { + return asyncTwitterWrapper; + } + + @Provides + ReadStateManager provideReadStateManager() { + return readStateManager; + } + + public ActivityStack getActivityStack() { + return activityStack; + } + + public AsyncTwitterWrapper getAsyncTwitterWrapper() { + return asyncTwitterWrapper; + } + + public ReadStateManager getReadStateManager() { + return readStateManager; + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BackgroundOperationServiceComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BackgroundOperationServiceComponent.java new file mode 100644 index 000000000..7ca04d53a --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BackgroundOperationServiceComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.service.BackgroundOperationService; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface BackgroundOperationServiceComponent { + void inject(BackgroundOperationService object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAdapterComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAdapterComponent.java new file mode 100644 index 000000000..cf7bc507f --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAdapterComponent.java @@ -0,0 +1,35 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import android.support.v7.widget.RecyclerView; + +import org.mariotaku.twidere.adapter.BaseAdapter; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface BaseAdapterComponent { + void inject(BaseAdapter object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAppCompatActivityComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAppCompatActivityComponent.java new file mode 100644 index 000000000..9e066fb0b --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseAppCompatActivityComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface BaseAppCompatActivityComponent { + void inject(BaseAppCompatActivity object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseListFragmentComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseListFragmentComponent.java new file mode 100644 index 000000000..4e8873d35 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseListFragmentComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.fragment.BaseListFragment; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface BaseListFragmentComponent { + void inject(BaseListFragment object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseSupportDialogFragmentComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseSupportDialogFragmentComponent.java new file mode 100644 index 000000000..dc6556457 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/BaseSupportDialogFragmentComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface BaseSupportDialogFragmentComponent { + void inject(BaseSupportDialogFragment object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/GeneralComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/GeneralComponent.java new file mode 100644 index 000000000..c3d249398 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/GeneralComponent.java @@ -0,0 +1,42 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.fragment.BaseFragment; +import org.mariotaku.twidere.fragment.support.BaseSupportFragment; +import org.mariotaku.twidere.util.MultiSelectEventHandler; +import org.mariotaku.twidere.util.dagger.ApplicationModule; +import org.mariotaku.twidere.view.holder.StatusViewHolder; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface GeneralComponent { + void inject(StatusViewHolder.DummyStatusHolderAdapter object); + + void inject(BaseFragment object); + + void inject(BaseSupportFragment object); + + void inject(MultiSelectEventHandler object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/RefreshServiceComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/RefreshServiceComponent.java new file mode 100644 index 000000000..234d14a29 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/RefreshServiceComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.service.RefreshService; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface RefreshServiceComponent { + void inject(RefreshService object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/ThemedFragmentActivityComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/ThemedFragmentActivityComponent.java new file mode 100644 index 000000000..29b1f6b95 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/ThemedFragmentActivityComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.activity.support.ThemedFragmentActivity; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface ThemedFragmentActivityComponent { + void inject(ThemedFragmentActivity object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereCommandProviderComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereCommandProviderComponent.java new file mode 100644 index 000000000..7e905df81 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereCommandProviderComponent.java @@ -0,0 +1,34 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.provider.TwidereCommandProvider; +import org.mariotaku.twidere.provider.TwidereDataProvider; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface TwidereCommandProviderComponent { + void inject(TwidereCommandProvider object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereDataProviderComponent.java b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereDataProviderComponent.java new file mode 100644 index 000000000..fb1c4af13 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/util/dagger/component/TwidereDataProviderComponent.java @@ -0,0 +1,33 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2015 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.util.dagger.component; + +import org.mariotaku.twidere.provider.TwidereDataProvider; +import org.mariotaku.twidere.util.dagger.ApplicationModule; + +import dagger.Component; + +/** + * Created by mariotaku on 15/10/5. + */ +@Component(modules = ApplicationModule.class) +public interface TwidereDataProviderComponent { + void inject(TwidereDataProvider object); +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java index f58d97e11..dd6aa3e14 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/holder/StatusViewHolder.java @@ -31,6 +31,7 @@ import org.mariotaku.twidere.util.TwidereLinkify; import org.mariotaku.twidere.util.TwitterCardUtils; import org.mariotaku.twidere.util.UserColorNameManager; import org.mariotaku.twidere.util.Utils; +import org.mariotaku.twidere.util.dagger.component.DaggerGeneralComponent; import org.mariotaku.twidere.view.CardMediaContainer; import org.mariotaku.twidere.view.CardMediaContainer.OnMediaClickListener; import org.mariotaku.twidere.view.ForegroundColorView; @@ -40,6 +41,8 @@ import org.mariotaku.twidere.view.iface.IColorLabelView; import java.util.Locale; +import javax.inject.Inject; + import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText; import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; @@ -451,7 +454,8 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi private final SharedPreferencesWrapper preferences; private final MediaLoaderWrapper loader; private final MediaLoadingHandler handler; - private final AsyncTwitterWrapper twitter; + @Inject + AsyncTwitterWrapper twitter; private final TwidereLinkify linkify; private final UserColorNameManager manager; @@ -467,12 +471,12 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi private boolean shouldShowAccountsColor; public DummyStatusHolderAdapter(Context context) { + DaggerGeneralComponent.builder().applicationModule(TwidereApplication.getModule(context)).build().inject(this); this.context = context; preferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final TwidereApplication app = TwidereApplication.getInstance(context); loader = app.getMediaLoaderWrapper(); handler = new MediaLoadingHandler(R.id.media_preview_progress); - twitter = app.getTwitterWrapper(); manager = app.getUserColorNameManager(); linkify = new TwidereLinkify(null); updateOptions(); diff --git a/twidere/src/main/res/layout/dialog_status_quote_retweet.xml b/twidere/src/main/res/layout/dialog_status_quote_retweet.xml index 9a21151a5..aea5de5ab 100644 --- a/twidere/src/main/res/layout/dialog_status_quote_retweet.xml +++ b/twidere/src/main/res/layout/dialog_status_quote_retweet.xml @@ -18,7 +18,7 @@ --> - + android:layout_height="wrap_content"> + android:visibility="visible"> + + - +