diff --git a/build.gradle b/build.gradle index 7a0a4fd72..504a9b97c 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { dependencies { classpath 'com.github.ben-manes:gradle-versions-plugin:0.12.0' classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.google.gms:google-services:2.1.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath('fr.avianey.androidsvgdrawable:gradle-plugin:3.0.0') { // should be excluded to avoid conflict diff --git a/gradle.properties b/gradle.properties index 63b5f2ebb..7625c74d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,5 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +org.gradle.jvmargs=-Xmx2048M \ No newline at end of file diff --git a/twidere/.gitignore b/twidere/.gitignore index b90d2f167..c7aa48f88 100644 --- a/twidere/.gitignore +++ b/twidere/.gitignore @@ -1,2 +1,3 @@ /build -fabric.properties \ No newline at end of file +fabric.properties +google-services.json \ No newline at end of file diff --git a/twidere/build.gradle b/twidere/build.gradle index 9fcb7f802..5ef23730b 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -1,10 +1,13 @@ import fr.avianey.androidsvgdrawable.gradle.SvgDrawableTask apply plugin: 'com.android.application' -apply plugin: 'io.fabric' apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'androidsvgdrawable' +// START Non-free services +apply plugin: 'io.fabric' +// END Non-free services + buildscript { repositories { maven { url 'https://maven.fabric.io/public' } @@ -93,6 +96,8 @@ dependencies { compile project(':twidere.component.nyan') googleCompile 'com.google.android.gms:play-services-maps:8.4.0' + googleCompile 'com.google.android.gms:play-services-auth:8.4.0' + googleCompile 'com.google.android.gms:play-services-measurement:8.4.0' googleCompile 'com.google.maps.android:android-maps-utils:0.4.3' googleCompile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') { transitive = true } googleCompile ':YouTubeAndroidPlayerApi:1.2.2@jar' @@ -186,3 +191,7 @@ task svgToMipmap(type: SvgDrawableTask) { outputType = 'mipmap' } + +// START Non-free services +apply plugin: 'com.google.gms.google-services' +// END Non-free services \ No newline at end of file diff --git a/twidere/src/debug/res/values/defaults.xml b/twidere/src/debug/res/values/defaults.xml index 670c84887..57d4eed51 100644 --- a/twidere/src/debug/res/values/defaults.xml +++ b/twidere/src/debug/res/values/defaults.xml @@ -1,4 +1,5 @@ 10 + true \ No newline at end of file diff --git a/twidere/src/main/AndroidManifest.xml b/twidere/src/main/AndroidManifest.xml index f417efc2e..c9074b0f2 100644 --- a/twidere/src/main/AndroidManifest.xml +++ b/twidere/src/main/AndroidManifest.xml @@ -395,7 +395,6 @@ - @@ -451,6 +450,14 @@ android:name=".activity.IncompatibleAlertActivity" android:label="@string/error_title_device_incompatible" android:theme="@android:style/Theme.DeviceDefault.Dialog"/> + + + \ No newline at end of file diff --git a/twidere/src/main/java/org/mariotaku/twidere/Constants.java b/twidere/src/main/java/org/mariotaku/twidere/Constants.java index 93cb99924..d93814845 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/Constants.java +++ b/twidere/src/main/java/org/mariotaku/twidere/Constants.java @@ -105,4 +105,5 @@ public interface Constants extends TwidereConstants { @Preference(type = STRING, exportable = false) String KEY_DEVICE_SERIAL = "device_serial"; + String GOOGLE_APIS_SERVER_CLIENT_ID = "223623398518-1p34hsndj7couh2c9c2f8909amh9euhf.apps.googleusercontent.com"; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.java new file mode 100644 index 000000000..1d86ef809 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.java @@ -0,0 +1,16 @@ +package org.mariotaku.twidere.activity; + +import android.content.Intent; +import android.os.Bundle; + +import org.mariotaku.twidere.R; + +public class PlusServiceDashboardActivity extends BaseActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_plus_service_dashboard); + startActivity(new Intent(this, PlusServiceSignInActivity.class)); + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceSignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceSignInActivity.java new file mode 100644 index 000000000..f56484b5a --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/PlusServiceSignInActivity.java @@ -0,0 +1,98 @@ +package org.mariotaku.twidere.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.util.Log; +import android.view.View; + +import com.google.android.gms.auth.api.Auth; +import com.google.android.gms.auth.api.signin.GoogleSignInAccount; +import com.google.android.gms.auth.api.signin.GoogleSignInOptions; +import com.google.android.gms.auth.api.signin.GoogleSignInResult; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.api.GoogleApiClient; + +import org.mariotaku.twidere.R; + +/** + * Created by mariotaku on 16/5/11. + */ +public class PlusServiceSignInActivity extends BaseActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { + + private static final int REQUEST_GOOGLE_SIGN_IN = 101; + + private GoogleApiClient mGoogleApiClient; + private View mGoogleSignInButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_plus_service_sign_in); + // Configure sign-in to request the user's ID, email address, and basic + // profile. ID and basic profile are included in DEFAULT_SIGN_IN. + GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestEmail() + .requestIdToken(GOOGLE_APIS_SERVER_CLIENT_ID) + .build(); + // Build a GoogleApiClient with access to the Google Sign-In API and the + // options specified by gso. + mGoogleApiClient = new GoogleApiClient.Builder(this) + .enableAutoManage(this, this) + .addApi(Auth.GOOGLE_SIGN_IN_API, gso) + .build(); + + mGoogleSignInButton.setOnClickListener(this); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); + if (requestCode == REQUEST_GOOGLE_SIGN_IN) { + GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); + handleSignInResult(result); + } + } + + + @Override + public void onContentChanged() { + super.onContentChanged(); + mGoogleSignInButton = findViewById(R.id.google_sign_in); + } + + @Override + public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.google_sign_in: { + signInWithGoogle(); + break; + } + } + } + + private void signInWithGoogle() { + Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); + startActivityForResult(signInIntent, REQUEST_GOOGLE_SIGN_IN); + } + + private void handleSignInResult(GoogleSignInResult result) { + Log.d(LOGTAG, "handleSignInResult:" + result.isSuccess()); + if (result.isSuccess()) { + // TODO Signed in successfully, show authenticated UI. + GoogleSignInAccount acct = result.getSignInAccount(); + acct.getIdToken(); + Log.d(LOGTAG, "sign in name:" + acct.getDisplayName()); + } else { + // TODO Signed out, show unauthenticated UI. + } + } + +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/AccountsDashboardFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/AccountsDashboardFragment.java index 64df8ceca..dc28c7215 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/AccountsDashboardFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/AccountsDashboardFragment.java @@ -73,6 +73,7 @@ import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.ComposeActivity; import org.mariotaku.twidere.activity.HomeActivity; +import org.mariotaku.twidere.activity.PlusServiceDashboardActivity; import org.mariotaku.twidere.activity.QuickSearchBarActivity; import org.mariotaku.twidere.activity.SettingsActivity; import org.mariotaku.twidere.annotation.CustomTabType; @@ -703,6 +704,12 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo closeAccountsDrawer(); break; } + case R.id.plus_service: { + final Intent intent = new Intent(getActivity(), PlusServiceDashboardActivity.class); + startActivity(intent); + closeAccountsDrawer(); + break; + } case R.id.settings: { final Intent intent = new Intent(getActivity(), SettingsActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java index 190f51196..0e73e935c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.Loader; @@ -95,6 +96,16 @@ public class ItemsListFragment extends AbsContentListRecyclerViewFragment + + + diff --git a/twidere/src/main/res/layout/activity_plus_service_sign_in.xml b/twidere/src/main/res/layout/activity_plus_service_sign_in.xml new file mode 100644 index 000000000..063aebe4f --- /dev/null +++ b/twidere/src/main/res/layout/activity_plus_service_sign_in.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/twidere/src/main/res/menu/menu_account_dashboard.xml b/twidere/src/main/res/menu/menu_account_dashboard.xml index 90fd3c84d..2c3c6977c 100644 --- a/twidere/src/main/res/menu/menu_account_dashboard.xml +++ b/twidere/src/main/res/menu/menu_account_dashboard.xml @@ -47,6 +47,12 @@ android:id="@id/filters" android:icon="@drawable/ic_action_speaker_muted" android:title="@string/filters"/> + - - - - - - - - \ No newline at end of file diff --git a/twidere/src/main/res/values/defaults.xml b/twidere/src/main/res/values/defaults.xml index 1c93a0dbc..e4a824dd5 100644 --- a/twidere/src/main/res/values/defaults.xml +++ b/twidere/src/main/res/values/defaults.xml @@ -6,5 +6,6 @@ round 1 50 + false \ No newline at end of file diff --git a/twidere/src/main/res/values/ids.xml b/twidere/src/main/res/values/ids.xml index 5bccff306..47baf3836 100644 --- a/twidere/src/main/res/values/ids.xml +++ b/twidere/src/main/res/values/ids.xml @@ -82,4 +82,5 @@ + \ No newline at end of file diff --git a/twidere/src/main/res/values/strings.xml b/twidere/src/main/res/values/strings.xml index b6fd91294..e4ed5882e 100644 --- a/twidere/src/main/res/values/strings.xml +++ b/twidere/src/main/res/values/strings.xml @@ -798,4 +798,5 @@ This device is not compatible with Twidere, upgrade to latest Android OS is recommended.\nYou can send information below to help me report this issue to device manufacturer. Password sign in (Twitter only) DM next + Twidere ∞ \ No newline at end of file diff --git a/twidere/src/main/svg/drawable/ic_action_infinity-mdpi.svg b/twidere/src/main/svg/drawable/ic_action_infinity-mdpi.svg new file mode 100644 index 000000000..8b23ffa09 --- /dev/null +++ b/twidere/src/main/svg/drawable/ic_action_infinity-mdpi.svg @@ -0,0 +1,12 @@ + + + + ic_action_infinity-mdpi + Created with Sketch. + + + + + + + \ No newline at end of file