diff --git a/app/build.gradle b/app/build.gradle index 725fb1c8..3be43f7e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' -apply plugin: 'android-apt' +apply plugin: 'com.google.gms.google-services' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 29 + buildToolsVersion "29.0.3" defaultConfig { applicationId "android.example.com.squawker" - minSdkVersion 16 - targetSdkVersion 25 + minSdkVersion 19 + targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -21,26 +21,20 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - compile 'com.android.support:appcompat-v7:25.1.0' - testCompile 'junit:junit:4.12' + implementation fileTree(dir: 'libs', include: ['*.jar']) - // RecyclerView - compile 'com.android.support:recyclerview-v7:25.1.0' + implementation 'androidx.appcompat:appcompat:1.1.0' - // Schematic dependencies for ContentProvider - apt 'net.simonvt.schematic:schematic-compiler:0.6.3' - compile 'net.simonvt.schematic:schematic:0.6.3' + testImplementation 'junit:junit:4.13.2' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + annotationProcessor 'net.simonvt.schematic:schematic-compiler:0.6.3' + implementation 'net.simonvt.schematic:schematic:0.6.3' + implementation "androidx.preference:preference:1.1.1" + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - // Preferences Dependencies - compile 'com.android.support:preference-v7:25.1.0' + implementation platform('com.google.firebase:firebase-bom:29.0.3') + implementation 'com.google.firebase:firebase-analytics' - // Firebase dependency - compile 'com.google.firebase:firebase-messaging:10.0.1' + implementation 'com.google.firebase:firebase-messaging:23.0.0' } -// Apply the Google Services plugin. Make sure to add the google-services.json file in the app -// folder. You download it from the Firebase console -apply plugin: 'com.google.gms.google-services' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 39412b52..6b40dbe2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,13 @@ android:authorities="android.example.com.squawker.provider.provider" android:exported="false" /> + + + + + + @@ -33,6 +40,13 @@ android:value=".MainActivity" /> + + + \ No newline at end of file diff --git a/app/src/main/java/android/example/com/squawker/MainActivity.java b/app/src/main/java/android/example/com/squawker/MainActivity.java index 5abffe75..3c8de9da 100644 --- a/app/src/main/java/android/example/com/squawker/MainActivity.java +++ b/app/src/main/java/android/example/com/squawker/MainActivity.java @@ -22,18 +22,20 @@ import android.example.com.squawker.provider.SquawkContract; import android.example.com.squawker.provider.SquawkProvider; import android.os.Bundle; -import android.support.v4.app.LoaderManager; -import android.support.v4.content.CursorLoader; -import android.support.v4.content.Loader; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.preference.PreferenceManager; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; +import androidx.preference.PreferenceManager; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.widget.Toast; +import com.google.firebase.messaging.FirebaseMessaging; public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks { @@ -84,11 +86,24 @@ protected void onCreate(Bundle savedInstanceState) { mRecyclerView.setAdapter(mAdapter); // Start the loader - getSupportLoaderManager().initLoader(LOADER_ID_MESSAGES, null, this); - - // TODO (1) Get the test data here from the extras bundle that came with this intent. - // To confirm that the data was passed in, make sure to show the data in a log statement. - + LoaderManager.getInstance(this).initLoader(LOADER_ID_MESSAGES, null, this); + + FirebaseMessaging.getInstance().getToken() + .addOnCompleteListener(task -> { + if (!task.isSuccessful()) { + Log.w(MainActivity.LOG_TAG, "Fetching FCM registration token failed", task.getException()); + return; + } + + // Get new FCM registration token + String token = task.getResult(); + + // Log and toast + String msg = getString(R.string.message_token_format, token); + Log.d(MainActivity.LOG_TAG, msg); + Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); + }); + FirebaseMessaging.getInstance().setAutoInitEnabled(true); } @Override diff --git a/app/src/main/java/android/example/com/squawker/SquawkAdapter.java b/app/src/main/java/android/example/com/squawker/SquawkAdapter.java index 89eb58dd..f3e9f497 100644 --- a/app/src/main/java/android/example/com/squawker/SquawkAdapter.java +++ b/app/src/main/java/android/example/com/squawker/SquawkAdapter.java @@ -18,7 +18,7 @@ import android.database.Cursor; import android.example.com.squawker.provider.SquawkContract; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -105,6 +105,8 @@ public void onBindViewHolder(SquawkViewHolder holder, int position) { case SquawkContract.NIKITA_KEY: holder.authorImageView.setImageResource(R.drawable.nikita); break; + case SquawkContract.SAGAR_KEY: + holder.authorImageView.setImageResource(R.drawable.test); default: holder.authorImageView.setImageResource(R.drawable.test); } diff --git a/app/src/main/java/android/example/com/squawker/fcm/SquawkFirebaseInstanceIdService.java b/app/src/main/java/android/example/com/squawker/fcm/SquawkFirebaseInstanceIdService.java new file mode 100644 index 00000000..1693b595 --- /dev/null +++ b/app/src/main/java/android/example/com/squawker/fcm/SquawkFirebaseInstanceIdService.java @@ -0,0 +1,23 @@ +package android.example.com.squawker.fcm; + +import android.util.Log; + +import com.google.firebase.messaging.FirebaseMessagingService; + +public class SquawkFirebaseInstanceIdService extends FirebaseMessagingService{ + + private static String LOG_TAG = SquawkFirebaseInstanceIdService.class.getSimpleName(); + @Override + public void onNewToken(String token) { + Log.d(LOG_TAG, "Refreshed token: " + token); + + // If you want to send messages to this application instance or + // manage this apps subscriptions on the server side, send the + // FCM registration token to your app server. + sendRegistrationToServer(token); + } + private void sendRegistrationToServer(String token) { + // This method is blank, but if you were to build a server that stores users token + // information, this is where you'd send the token to the server. + } +} diff --git a/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceActivity.java b/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceActivity.java index 72769779..ecc4eabe 100644 --- a/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceActivity.java +++ b/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceActivity.java @@ -17,9 +17,9 @@ import android.example.com.squawker.R; import android.os.Bundle; -import android.support.v4.app.NavUtils; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.NavUtils; import android.view.MenuItem; /** diff --git a/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceFragment.java b/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceFragment.java index 682f000c..c28589fa 100644 --- a/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceFragment.java +++ b/app/src/main/java/android/example/com/squawker/following/FollowingPreferenceFragment.java @@ -17,7 +17,9 @@ import android.example.com.squawker.R; import android.os.Bundle; -import android.support.v7.preference.PreferenceFragmentCompat; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.SwitchPreferenceCompat; /** diff --git a/app/src/main/java/android/example/com/squawker/provider/SquawkContract.java b/app/src/main/java/android/example/com/squawker/provider/SquawkContract.java index 252bdfd0..271d5574 100644 --- a/app/src/main/java/android/example/com/squawker/provider/SquawkContract.java +++ b/app/src/main/java/android/example/com/squawker/provider/SquawkContract.java @@ -58,6 +58,7 @@ public class SquawkContract { public static final String JLIN_KEY = "key_jlin"; public static final String LYLA_KEY = "key_lyla"; public static final String NIKITA_KEY = "key_nikita"; + public static final String SAGAR_KEY = "key_sagar"; public static final String TEST_ACCOUNT_KEY = "key_test"; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4f8500c1..805c739a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,7 +16,7 @@ android:layout_height="match_parent" tools:context="android.example.com.squawker.MainActivity"> - key_jlin key_lyla key_nikita + key_sagar Asser Cezanne Jessica Lyla Nikita + Sagar Not Following Following diff --git a/app/src/main/res/xml/following_squawker.xml b/app/src/main/res/xml/following_squawker.xml index efec3a92..3aeb172b 100644 --- a/app/src/main/res/xml/following_squawker.xml +++ b/app/src/main/res/xml/following_squawker.xml @@ -46,7 +46,12 @@ android:summaryOn="@string/follow_summary_following" android:title="@string/follow_title_switch_nikita" /> - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5ae0e993..a290e7d7 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,12 @@ buildscript { repositories { - jcenter() + google() + mavenCentral() } dependencies { - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.2' - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:7.0.4' + classpath 'com.google.gms:google-services:4.3.10' // Google Services plugin classpath 'com.google.gms:google-services:3.0.0' @@ -18,7 +19,8 @@ buildscript { allprojects { repositories { - jcenter() + google() + mavenCentral() } } diff --git a/gradle.properties b/gradle.properties index aac7c9b4..29b531a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m - +android.useAndroidX=true # 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f3..f3bd5913 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip