mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Fetch a new access token in onCreate method of MainActivity when the old access token is about to expire, specifically, to expire within the next 5 minutes or is already expired to avoid refreshing the access token many times by other queries later.
This commit is contained in:
parent
c6026e5659
commit
f2eb18749c
@ -14,6 +14,7 @@ import com.android.volley.toolbox.StringRequest;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -39,15 +40,16 @@ class AcquireAccessToken {
|
|||||||
if(mContext != null) {
|
if(mContext != null) {
|
||||||
mAcquireAccessTokenListener = acquireAccessTokenListener;
|
mAcquireAccessTokenListener = acquireAccessTokenListener;
|
||||||
final String refreshToken = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.REFRESH_TOKEN_KEY, "");
|
final String refreshToken = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.REFRESH_TOKEN_KEY, "");
|
||||||
|
final SharedPreferences.Editor editor = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).edit();
|
||||||
StringRequest newTokenRequest = new StringRequest(Request.Method.POST, RedditUtils.ACQUIRE_ACCESS_TOKEN_URL, new Response.Listener<String>() {
|
StringRequest newTokenRequest = new StringRequest(Request.Method.POST, RedditUtils.ACQUIRE_ACCESS_TOKEN_URL, new Response.Listener<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(String response) {
|
public void onResponse(String response) {
|
||||||
try {
|
try {
|
||||||
JSONObject jsonObject = new JSONObject(response);
|
JSONObject jsonObject = new JSONObject(response);
|
||||||
String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
|
String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
|
||||||
|
int expireIn = jsonObject.getInt(RedditUtils.EXPIRES_IN_KEY);
|
||||||
SharedPreferences.Editor editor = mContext.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).edit();
|
|
||||||
editor.putString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, newAccessToken);
|
editor.putString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, newAccessToken);
|
||||||
|
editor.putInt(SharedPreferencesUtils.ACCESS_TOKEN_EXPIRE_INTERVAL_KEY, expireIn);
|
||||||
editor.apply();
|
editor.apply();
|
||||||
|
|
||||||
Log.i("access token", newAccessToken);
|
Log.i("access token", newAccessToken);
|
||||||
@ -81,6 +83,11 @@ class AcquireAccessToken {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
newTokenRequest.setTag(AcquireAccessToken.class);
|
newTokenRequest.setTag(AcquireAccessToken.class);
|
||||||
|
|
||||||
|
long queryAccessTokenTime = Calendar.getInstance().getTimeInMillis();
|
||||||
|
editor.putLong(SharedPreferencesUtils.QUERY_ACCESS_TOKEN_TIME_KEY, queryAccessTokenTime);
|
||||||
|
editor.apply();
|
||||||
|
|
||||||
refreshQueue.add(newTokenRequest);
|
refreshQueue.add(newTokenRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import com.bumptech.glide.Glide;
|
|||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.hdodenhof.circleimageview.CircleImageView;
|
import de.hdodenhof.circleimageview.CircleImageView;
|
||||||
@ -50,6 +51,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
private String mBannerImageUrl;
|
private String mBannerImageUrl;
|
||||||
private String mKarma;
|
private String mKarma;
|
||||||
private boolean mFetchUserInfoSuccess;
|
private boolean mFetchUserInfoSuccess;
|
||||||
|
private boolean mIsInserting;
|
||||||
|
|
||||||
private SubscribedSubredditViewModel mSubscribedSubredditViewModel;
|
private SubscribedSubredditViewModel mSubscribedSubredditViewModel;
|
||||||
private SubscribedUserViewModel mSubscribedUserViewModel;
|
private SubscribedUserViewModel mSubscribedUserViewModel;
|
||||||
@ -67,6 +69,25 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
drawer.addDrawerListener(toggle);
|
drawer.addDrawerListener(toggle);
|
||||||
toggle.syncState();
|
toggle.syncState();
|
||||||
|
|
||||||
|
Calendar now = Calendar.getInstance();
|
||||||
|
Calendar queryAccessTokenTime = Calendar.getInstance();
|
||||||
|
queryAccessTokenTime.setTimeInMillis(getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
|
||||||
|
.getLong(SharedPreferencesUtils.QUERY_ACCESS_TOKEN_TIME_KEY, 0));
|
||||||
|
int interval = getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
|
||||||
|
.getInt(SharedPreferencesUtils.ACCESS_TOKEN_EXPIRE_INTERVAL_KEY, 0);
|
||||||
|
queryAccessTokenTime.add(Calendar.SECOND, interval - 300);
|
||||||
|
|
||||||
|
if(now.after(queryAccessTokenTime)) {
|
||||||
|
new AcquireAccessToken(this).refreshAccessToken(Volley.newRequestQueue(this),
|
||||||
|
new AcquireAccessToken.AcquireAccessTokenListener() {
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenSuccess() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenFail() {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
View header = findViewById(R.id.nav_header_main_activity);
|
View header = findViewById(R.id.nav_header_main_activity);
|
||||||
mNameTextView = header.findViewById(R.id.name_text_view_nav_header_main);
|
mNameTextView = header.findViewById(R.id.name_text_view_nav_header_main);
|
||||||
mKarmaTextView = header.findViewById(R.id.karma_text_view_nav_header_main);
|
mKarmaTextView = header.findViewById(R.id.karma_text_view_nav_header_main);
|
||||||
@ -164,14 +185,15 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(this, new Observer<List<SubscribedSubredditData>>() {
|
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(this, new Observer<List<SubscribedSubredditData>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(@Nullable final List<SubscribedSubredditData> subscribedSubredditData) {
|
public void onChanged(@Nullable final List<SubscribedSubredditData> subscribedSubredditData) {
|
||||||
// Update the cached copy of the words in the adapter.
|
if(!mIsInserting) {
|
||||||
if(subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
|
if(subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
|
||||||
subscriptionsLabelTextView.setVisibility(View.GONE);
|
subscriptionsLabelTextView.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
subscriptionsLabelTextView.setVisibility(View.VISIBLE);
|
subscriptionsLabelTextView.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
subredditadapter.setSubscribedSubreddits(subscribedSubredditData);
|
subredditadapter.setSubscribedSubreddits(subscribedSubredditData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -181,13 +203,14 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
mSubscribedUserViewModel.getAllSubscribedUsers().observe(this, new Observer<List<SubscribedUserData>>() {
|
mSubscribedUserViewModel.getAllSubscribedUsers().observe(this, new Observer<List<SubscribedUserData>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(@Nullable final List<SubscribedUserData> subscribedUserData) {
|
public void onChanged(@Nullable final List<SubscribedUserData> subscribedUserData) {
|
||||||
// Update the cached copy of the words in the adapter.
|
if(!mIsInserting) {
|
||||||
if(subscribedUserData == null || subscribedUserData.size() == 0) {
|
if(subscribedUserData == null || subscribedUserData.size() == 0) {
|
||||||
followingLabelTextView.setVisibility(View.GONE);
|
followingLabelTextView.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
followingLabelTextView.setVisibility(View.VISIBLE);
|
followingLabelTextView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
userAdapter.setSubscribedUsers(subscribedUserData);
|
||||||
}
|
}
|
||||||
userAdapter.setSubscribedUsers(subscribedUserData);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -197,11 +220,18 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
public void onFetchSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||||
ArrayList<SubscribedUserData> subscribedUserData) {
|
ArrayList<SubscribedUserData> subscribedUserData) {
|
||||||
|
mIsInserting = true;
|
||||||
new InsertSubscribedThingsAsyncTask(
|
new InsertSubscribedThingsAsyncTask(
|
||||||
SubscribedSubredditRoomDatabase.getDatabase(MainActivity.this),
|
SubscribedSubredditRoomDatabase.getDatabase(MainActivity.this),
|
||||||
SubscribedUserRoomDatabase.getDatabase(MainActivity.this),
|
SubscribedUserRoomDatabase.getDatabase(MainActivity.this),
|
||||||
subscribedSubredditData,
|
subscribedSubredditData,
|
||||||
subscribedUserData).execute();
|
subscribedUserData,
|
||||||
|
new InsertSubscribedThingsAsyncTask.InsertSubscribedThingListener() {
|
||||||
|
@Override
|
||||||
|
public void insertSuccess() {
|
||||||
|
mIsInserting = false;
|
||||||
|
}
|
||||||
|
}).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -252,19 +282,26 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private static class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void> {
|
private static class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
interface InsertSubscribedThingListener {
|
||||||
|
void insertSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
private final SubscribedSubredditDao mSubredditDao;
|
private final SubscribedSubredditDao mSubredditDao;
|
||||||
private final SubscribedUserDao mUserDao;
|
private final SubscribedUserDao mUserDao;
|
||||||
private List<SubscribedSubredditData> subscribedSubredditData;
|
private List<SubscribedSubredditData> subscribedSubredditData;
|
||||||
private List<SubscribedUserData> subscribedUserData;
|
private List<SubscribedUserData> subscribedUserData;
|
||||||
|
private InsertSubscribedThingListener insertSubscribedThingListener;
|
||||||
|
|
||||||
InsertSubscribedThingsAsyncTask(SubscribedSubredditRoomDatabase subredditDb,
|
InsertSubscribedThingsAsyncTask(SubscribedSubredditRoomDatabase subredditDb,
|
||||||
SubscribedUserRoomDatabase userDb,
|
SubscribedUserRoomDatabase userDb,
|
||||||
List<SubscribedSubredditData> subscribedSubredditData,
|
List<SubscribedSubredditData> subscribedSubredditData,
|
||||||
List<SubscribedUserData> subscribedUserData) {
|
List<SubscribedUserData> subscribedUserData,
|
||||||
|
InsertSubscribedThingListener insertSubscribedThingListener) {
|
||||||
mSubredditDao = subredditDb.subscribedSubredditDao();
|
mSubredditDao = subredditDb.subscribedSubredditDao();
|
||||||
mUserDao = userDb.subscribedUserDao();
|
mUserDao = userDb.subscribedUserDao();
|
||||||
this.subscribedSubredditData = subscribedSubredditData;
|
this.subscribedSubredditData = subscribedSubredditData;
|
||||||
this.subscribedUserData = subscribedUserData;
|
this.subscribedUserData = subscribedUserData;
|
||||||
|
this.insertSubscribedThingListener = insertSubscribedThingListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -277,5 +314,10 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
insertSubscribedThingListener.insertSuccess();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ class RedditUtils {
|
|||||||
static final String SCOPE_KEY = "scope";
|
static final String SCOPE_KEY = "scope";
|
||||||
static final String SCOPE = "identity edit flair history modconfig modflair modlog modposts modwiki mysubreddits privatemessages read report save submit subscribe vote wikiedit wikiread";
|
static final String SCOPE = "identity edit flair history modconfig modflair modlog modposts modwiki mysubreddits privatemessages read report save submit subscribe vote wikiedit wikiread";
|
||||||
static final String ACCESS_TOKEN_KEY = "access_token";
|
static final String ACCESS_TOKEN_KEY = "access_token";
|
||||||
|
static final String EXPIRES_IN_KEY = "expires_in";
|
||||||
|
|
||||||
static final String AUTHORIZATION_KEY = "Authorization";
|
static final String AUTHORIZATION_KEY = "Authorization";
|
||||||
static final String AUTHORIZATION_BASE = "bearer ";
|
static final String AUTHORIZATION_BASE = "bearer ";
|
||||||
|
@ -11,7 +11,7 @@ class SharedPreferencesUtils {
|
|||||||
static final String ACCESS_TOKEN_KEY = "accessToken";
|
static final String ACCESS_TOKEN_KEY = "accessToken";
|
||||||
static final String REFRESH_TOKEN_KEY = "refreshToken";
|
static final String REFRESH_TOKEN_KEY = "refreshToken";
|
||||||
static final String QUERY_ACCESS_TOKEN_TIME_KEY = "queryAccessTokenTime";
|
static final String QUERY_ACCESS_TOKEN_TIME_KEY = "queryAccessTokenTime";
|
||||||
static final String ACCESS_TOKEN_EXPIRE_TIME_KEY = "accessTokenExpireTime";
|
static final String ACCESS_TOKEN_EXPIRE_INTERVAL_KEY = "accessTokenExpireInterval";
|
||||||
static final String MODHASH_KEY = "modhash";
|
static final String MODHASH_KEY = "modhash";
|
||||||
static final String USER_KEY = "user";
|
static final String USER_KEY = "user";
|
||||||
static final String PROFILE_IMAGE_URL_KEY = "profileImageUrl";
|
static final String PROFILE_IMAGE_URL_KEY = "profileImageUrl";
|
||||||
|
@ -9,6 +9,8 @@ import android.support.design.widget.AppBarLayout;
|
|||||||
import android.support.design.widget.CollapsingToolbarLayout;
|
import android.support.design.widget.CollapsingToolbarLayout;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@ -34,7 +36,11 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID);
|
String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID);
|
||||||
final String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
|
String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
|
||||||
|
|
||||||
|
final String title = "r/" + subredditName;
|
||||||
|
setTitle(title);
|
||||||
|
|
||||||
final CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collapsing_toolbar_layout_view_subreddit_detail_activity);
|
final CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collapsing_toolbar_layout_view_subreddit_detail_activity);
|
||||||
AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout_view_subreddit_detail_activity);
|
AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout_view_subreddit_detail_activity);
|
||||||
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
||||||
@ -47,7 +53,8 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
scrollRange = appBarLayout.getTotalScrollRange();
|
scrollRange = appBarLayout.getTotalScrollRange();
|
||||||
}
|
}
|
||||||
if (scrollRange + verticalOffset == 0) {
|
if (scrollRange + verticalOffset == 0) {
|
||||||
collapsingToolbarLayout.setTitle(subredditName);
|
Log.i("asfasdf", "asdfasdf");
|
||||||
|
collapsingToolbarLayout.setTitle(title);
|
||||||
isShow = true;
|
isShow = true;
|
||||||
} else if(isShow) {
|
} else if(isShow) {
|
||||||
collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work
|
collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work
|
||||||
@ -114,6 +121,16 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
private final SubredditDao mSubredditDao;
|
private final SubredditDao mSubredditDao;
|
||||||
|
@ -82,6 +82,7 @@
|
|||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_toStartOf="@id/subscriber_count_text_view_view_subreddit_detail_activity"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@android:color/black" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
@ -102,9 +103,11 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:layout_collapseMode="pin"
|
app:layout_collapseMode="pin"
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||||
|
app:navigationIcon="?attr/homeAsUpIndicator" />
|
||||||
|
|
||||||
</android.support.design.widget.CollapsingToolbarLayout>
|
</android.support.design.widget.CollapsingToolbarLayout>
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<include layout="@layout/content_view_subreddit_detail" />
|
<include layout="@layout/content_view_subreddit_detail" />
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
<string name="profile">Profile</string>
|
<string name="profile">Profile</string>
|
||||||
<string name="following">Following</string>
|
<string name="following">Following</string>
|
||||||
<string name="subscriptions">Subscriptions</string>
|
<string name="subscriptions">Subscriptions</string>
|
||||||
<string name="title_activity_view_subreddit_detail">ViewSubredditDetailActivity</string>
|
|
||||||
<string name="subscribers_number_detail">Subscribers: %1$d</string>
|
<string name="subscribers_number_detail">Subscribers: %1$d</string>
|
||||||
<string name="online_subscribers_number_detail">Online: %1$d</string>
|
<string name="online_subscribers_number_detail">Online: %1$d</string>
|
||||||
<string name="large_text">
|
<string name="large_text">
|
||||||
|
Loading…
Reference in New Issue
Block a user