diff options
author | Alex Ning <chineseperson5@gmail.com> | 2019-08-01 05:23:47 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2019-08-01 05:23:47 +0000 |
commit | a2f301f75e34a3a28cad081d445dfd021fce45c1 (patch) | |
tree | b6b0d2338eb0f15b98393f522d631f8b8d784780 | |
parent | 47515b87d0490f75dfb0705330f791035024533a (diff) | |
download | infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar.gz infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar.bz2 infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar.lz infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar.xz infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.tar.zst infinity-for-reddit-a2f301f75e34a3a28cad081d445dfd021fce45c1.zip |
Implement Deep Link to open reddit links directly in this app.
5 files changed, 104 insertions, 9 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 423600da..8a75d069 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,7 +73,6 @@ android:theme="@style/AppTheme.NoActionBarWithTransparentStatusBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> @@ -92,15 +91,42 @@ <activity android:name=".ViewPostDetailActivity" android:parentActivityName=".MainActivity" - android:theme="@style/AppTheme.NoActionBar" /> + android:theme="@style/AppTheme.NoActionBar"> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="https" + android:host="www.reddit.com" + android:pathPattern="/r/..*/comments/..*"/> + </intent-filter> + </activity> <activity android:name=".ViewSubredditDetailActivity" android:parentActivityName=".MainActivity" - android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow" /> + android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow"> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="https" + android:host="www.reddit.com" + android:pathPattern="/r/..*"/> + </intent-filter> + </activity> <activity android:name=".ViewUserDetailActivity" android:parentActivityName=".MainActivity" - android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow" /> + android:theme="@style/AppTheme.NoActionBarWithTranslucentWindow"> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="https" + android:host="www.reddit.com" + android:pathPattern="/user/..*"/> + </intent-filter> + </activity> <provider android:name="androidx.core.content.FileProvider" diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java index fd200165..3810ed96 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java @@ -44,6 +44,8 @@ import retrofit2.Retrofit; public class MainActivity extends AppCompatActivity implements SortTypeBottomSheetFragment.SortTypeSelectionCallback, PostTypeBottomSheetFragment.PostTypeSelectionCallback { + static final String EXTRA_POST_TYPE = "EPT"; + private static final String FETCH_USER_INFO_STATE = "FUIS"; private static final String IS_IN_LAZY_MODE_STATE = "IILMS"; @@ -138,6 +140,14 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe if (savedInstanceState != null) { mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); + } else { + if(getIntent().hasExtra(EXTRA_POST_TYPE)) { + if(getIntent().getExtras().getString(EXTRA_POST_TYPE).equals("popular")) { + viewPager.setCurrentItem(1); + } else { + viewPager.setCurrentItem(2); + } + } } glide = Glide.with(this); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java index 87c4a380..27b59c33 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java @@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; @@ -32,6 +33,7 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import java.util.ArrayList; +import java.util.List; import java.util.Locale; import javax.inject.Inject; @@ -62,6 +64,8 @@ public class ViewPostDetailActivity extends AppCompatActivity { @State Post mPost; @State + Uri postUri; + @State boolean isLoadingMoreChildren = false; @State boolean isRefreshing = false; @@ -122,13 +126,17 @@ public class ViewPostDetailActivity extends AppCompatActivity { orientation = getResources().getConfiguration().orientation; if(mPost == null) { - mPost = getIntent().getExtras().getParcelable(EXTRA_POST_DATA); + if(getIntent().getData() != null) { + postUri = getIntent().getData(); + } else { + mPost = getIntent().getExtras().getParcelable(EXTRA_POST_DATA); + } } - if(mPost == null) { + if(postUri == null && mPost == null) { mProgressBar.setVisibility(View.VISIBLE); fetchPostAndCommentsById(getIntent().getExtras().getString(EXTRA_POST_ID)); - } else { + } else if(mPost != null) { mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit, mOauthRetrofit, mGlide, mSharedPreferences, mPost, mPost.getSubredditNamePrefixed(), mLocale, mLoadSubredditIconAsyncTask, @@ -162,6 +170,17 @@ public class ViewPostDetailActivity extends AppCompatActivity { } } } + } else { + mProgressBar.setVisibility(View.VISIBLE); + List<String> segments = postUri.getPathSegments(); + int commentIndex = segments.indexOf("comments"); + if(commentIndex >= 0 || commentIndex != segments.size() - 1) { + mProgressBar.setVisibility(View.VISIBLE); + fetchPostAndCommentsById(segments.get(commentIndex + 1)); + } else { + //Deep link error handling + finish(); + } } if(getIntent().hasExtra(EXTRA_POST_LIST_POSITION)) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java index fb5664ad..f6e0e9ca 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java @@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit; import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; @@ -26,6 +27,8 @@ import com.google.android.material.chip.Chip; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; +import java.util.List; + import javax.inject.Inject; import javax.inject.Named; @@ -63,6 +66,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So @BindView(R.id.fab_view_subreddit_detail_activity) FloatingActionButton fab; private String subredditName; + private Uri subredditUri; private boolean subscriptionReady = false; private boolean isInLazyMode = false; @@ -113,7 +117,26 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So statusBarHeight = getResources().getDimensionPixelSize(resourceId); } - subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY); + if(getIntent().getData() != null) { + subredditUri = getIntent().getData(); + List<String> segments = subredditUri.getPathSegments(); + int rIndex = segments.indexOf("r"); + if(rIndex >= 0 && rIndex < segments.size() - 1) { + subredditName = segments.get(rIndex + 1); + if(subredditName.equals("popular") || subredditName.equals("all")) { + Intent intent = new Intent(this, MainActivity.class); + intent.putExtra(MainActivity.EXTRA_POST_TYPE, subredditName); + startActivity(intent); + finish(); + } + } else { + //Deep link error handling + finish(); + } + } else { + subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY); + } + String title = "r/" + subredditName; subredditNameTextView.setText(title); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java index cc1edbad..1e1c6d7c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java @@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit; import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; @@ -29,6 +30,8 @@ import com.google.android.material.chip.Chip; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayout; +import java.util.List; + import javax.inject.Inject; import javax.inject.Named; @@ -71,6 +74,7 @@ public class ViewUserDetailActivity extends AppCompatActivity { private AppBarLayout.LayoutParams params; private String userName; + private Uri userUri; private boolean subscriptionReady = false; private boolean isInLazyMode = false; private int colorPrimary; @@ -106,7 +110,20 @@ public class ViewUserDetailActivity extends AppCompatActivity { statusBarHeight = getResources().getDimensionPixelSize(resourceId); } - userName = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY); + if(getIntent().getData() != null) { + userUri = getIntent().getData(); + List<String> segments = userUri.getPathSegments(); + int userIndex = segments.indexOf("user"); + if(userIndex >= 0 && userIndex < segments.size() - 1) { + userName = segments.get(userIndex + 1); + } else { + //Deep link error handling + finish(); + } + } else { + userName = getIntent().getExtras().getString(EXTRA_USER_NAME_KEY); + } + String title = "u/" + userName; userNameTextView.setText(title); |