Merged in develop (pull request #3)
This commit is contained in:
commit
f4749833da
|
@ -7,8 +7,8 @@ android {
|
||||||
applicationId "fr.gouv.etalab.mastodon"
|
applicationId "fr.gouv.etalab.mastodon"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
versionCode 4
|
versionCode 5
|
||||||
versionName "1.0.4"
|
versionName "1.0.5"
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|
|
@ -23,7 +23,6 @@ import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.support.design.widget.NavigationView;
|
import android.support.design.widget.NavigationView;
|
||||||
import android.support.v4.view.GravityCompat;
|
import android.support.v4.view.GravityCompat;
|
||||||
|
@ -49,6 +48,7 @@ import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoByIDAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
||||||
import fr.gouv.etalab.mastodon.fragments.DisplayAccountsFragment;
|
import fr.gouv.etalab.mastodon.fragments.DisplayAccountsFragment;
|
||||||
import fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment;
|
import fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment;
|
||||||
|
@ -57,7 +57,6 @@ import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
|
|
||||||
import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
|
import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
|
||||||
import fr.gouv.etalab.mastodon.fragments.TabLayoutSettingsFragment;
|
import fr.gouv.etalab.mastodon.fragments.TabLayoutSettingsFragment;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||||
|
@ -74,6 +73,9 @@ public class MainActivity extends AppCompatActivity
|
||||||
private HashMap<String, String> tagTile = new HashMap<>();
|
private HashMap<String, String> tagTile = new HashMap<>();
|
||||||
private HashMap<String, Integer> tagItem = new HashMap<>();
|
private HashMap<String, Integer> tagItem = new HashMap<>();
|
||||||
private Toolbar toolbar;
|
private Toolbar toolbar;
|
||||||
|
private ImageLoader imageLoader;
|
||||||
|
private DisplayImageOptions options;
|
||||||
|
private View headerLayout;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -113,7 +115,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
|
|
||||||
//Image loader configuration
|
//Image loader configuration
|
||||||
ImageLoader imageLoader;
|
|
||||||
imageLoader = ImageLoader.getInstance();
|
imageLoader = ImageLoader.getInstance();
|
||||||
File cacheDir = new File(getCacheDir(), getString(R.string.app_name));
|
File cacheDir = new File(getCacheDir(), getString(R.string.app_name));
|
||||||
ImageLoaderConfiguration configImg = new ImageLoaderConfiguration.Builder(this)
|
ImageLoaderConfiguration configImg = new ImageLoaderConfiguration.Builder(this)
|
||||||
|
@ -124,38 +125,16 @@ public class MainActivity extends AppCompatActivity
|
||||||
.build();
|
.build();
|
||||||
imageLoader.init(configImg);
|
imageLoader.init(configImg);
|
||||||
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(90)).cacheInMemory(false)
|
options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(90)).cacheInMemory(false)
|
||||||
.cacheOnDisk(true).resetViewBeforeLoading(true).build();
|
.cacheOnDisk(true).resetViewBeforeLoading(true).build();
|
||||||
|
|
||||||
|
|
||||||
View headerLayout = navigationView.getHeaderView(0);
|
headerLayout = navigationView.getHeaderView(0);
|
||||||
|
|
||||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
String prefKeyOauthTokenT = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
|
String prefKeyOauthTokenT = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
|
||||||
|
|
||||||
ImageView profilePicture = (ImageView) headerLayout.findViewById(R.id.profilePicture);
|
|
||||||
TextView username = (TextView) headerLayout.findViewById(R.id.username);
|
|
||||||
TextView displayedName = (TextView) headerLayout.findViewById(R.id.displayedName);
|
|
||||||
TextView ownerStatus = (TextView) headerLayout.findViewById(R.id.owner_status);
|
|
||||||
TextView ownerFollowing = (TextView) headerLayout.findViewById(R.id.owner_following);
|
|
||||||
TextView ownerFollowers = (TextView) headerLayout.findViewById(R.id.owner_followers);
|
|
||||||
|
|
||||||
Account account = new AccountDAO(getApplicationContext(), db).getAccountByToken(prefKeyOauthTokenT);
|
Account account = new AccountDAO(getApplicationContext(), db).getAccountByToken(prefKeyOauthTokenT);
|
||||||
//Something wrong happened with the account recorded in db (ie: bad token)
|
updateHeaderAccountInfo(account);
|
||||||
if( account == null ) {
|
|
||||||
Helper.logout(getApplicationContext());
|
|
||||||
Intent myIntent = new Intent(MainActivity.this, LoginActivity.class);
|
|
||||||
Toast.makeText(getApplicationContext(),R.string.toast_error, Toast.LENGTH_LONG).show();
|
|
||||||
startActivity(myIntent);
|
|
||||||
finish(); //User is logged out to get a new token
|
|
||||||
}else {
|
|
||||||
ownerStatus.setText(String.valueOf(account.getStatuses_count()));
|
|
||||||
ownerFollowers.setText(String.valueOf(account.getFollowers_count()));
|
|
||||||
ownerFollowing.setText(String.valueOf(account.getFollowing_count()));
|
|
||||||
username.setText(String.format("@%s",account.getUsername()));
|
|
||||||
displayedName.setText(account.getDisplay_name());
|
|
||||||
imageLoader.displayImage(account.getAvatar(), profilePicture, options);
|
|
||||||
}
|
|
||||||
boolean menuWasSelected = false;
|
boolean menuWasSelected = false;
|
||||||
if( getIntent() != null && getIntent().getExtras() != null ){
|
if( getIntent() != null && getIntent().getExtras() != null ){
|
||||||
Bundle extras = getIntent().getExtras();
|
Bundle extras = getIntent().getExtras();
|
||||||
|
@ -325,7 +304,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
super.onResume();
|
super.onResume();
|
||||||
//Proceeds to update of the authenticated account
|
//Proceeds to update of the authenticated account
|
||||||
if(Helper.isLoggedIn(getApplicationContext()))
|
if(Helper.isLoggedIn(getApplicationContext()))
|
||||||
new UpdateAccountInfoAsyncTask(getApplicationContext(), null, MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new UpdateAccountInfoByIDAsyncTask(getApplicationContext(), MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -430,6 +409,30 @@ public class MainActivity extends AppCompatActivity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateHeaderAccountInfo(Account account){
|
||||||
|
ImageView profilePicture = (ImageView) headerLayout.findViewById(R.id.profilePicture);
|
||||||
|
TextView username = (TextView) headerLayout.findViewById(R.id.username);
|
||||||
|
TextView displayedName = (TextView) headerLayout.findViewById(R.id.displayedName);
|
||||||
|
TextView ownerStatus = (TextView) headerLayout.findViewById(R.id.owner_status);
|
||||||
|
TextView ownerFollowing = (TextView) headerLayout.findViewById(R.id.owner_following);
|
||||||
|
TextView ownerFollowers = (TextView) headerLayout.findViewById(R.id.owner_followers);
|
||||||
|
//Something wrong happened with the account recorded in db (ie: bad token)
|
||||||
|
if( account == null ) {
|
||||||
|
Helper.logout(getApplicationContext());
|
||||||
|
Intent myIntent = new Intent(MainActivity.this, LoginActivity.class);
|
||||||
|
Toast.makeText(getApplicationContext(),R.string.toast_error, Toast.LENGTH_LONG).show();
|
||||||
|
startActivity(myIntent);
|
||||||
|
finish(); //User is logged out to get a new token
|
||||||
|
}else {
|
||||||
|
ownerStatus.setText(String.valueOf(account.getStatuses_count()));
|
||||||
|
ownerFollowers.setText(String.valueOf(account.getFollowers_count()));
|
||||||
|
ownerFollowing.setText(String.valueOf(account.getFollowing_count()));
|
||||||
|
username.setText(String.format("@%s",account.getUsername()));
|
||||||
|
displayedName.setText(account.getDisplay_name());
|
||||||
|
imageLoader.displayImage(account.getAvatar(), profilePicture, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void populateTitleWithTag(String tag, String title, int index){
|
private void populateTitleWithTag(String tag, String title, int index){
|
||||||
if( tag == null)
|
if( tag == null)
|
||||||
return;
|
return;
|
||||||
|
@ -448,11 +451,17 @@ public class MainActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateAccountInfo(boolean error) {
|
public void onUpdateAccountInfo(boolean error) {
|
||||||
if( error){
|
if( error){
|
||||||
//It is not, the user is redirected to the login page
|
//An error occurred, the user is redirected to the login page
|
||||||
Helper.logout(getApplicationContext());
|
Helper.logout(getApplicationContext());
|
||||||
Intent myIntent = new Intent(MainActivity.this, LoginActivity.class);
|
Intent myIntent = new Intent(MainActivity.this, LoginActivity.class);
|
||||||
startActivity(myIntent);
|
startActivity(myIntent);
|
||||||
finish();
|
finish();
|
||||||
|
}else {
|
||||||
|
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
SQLiteDatabase db = Sqlite.getInstance(MainActivity.this, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
|
Account account = new AccountDAO(getApplicationContext(), db).getAccountByID(userId);
|
||||||
|
updateHeaderAccountInfo(account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/* Copyright 2017 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastodon Etalab for mastodon.etalab.gouv.fr
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Mastodon Etalab 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 Thomas Schneider; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
package fr.gouv.etalab.mastodon.asynctasks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
||||||
|
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||||
|
import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface;
|
||||||
|
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||||
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Thomas on 17/05/2017.
|
||||||
|
* Manage the synchronization with the authenticated account and update the db not
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class UpdateAccountInfoByIDAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private OnUpdateAccountInfoInterface listener;
|
||||||
|
|
||||||
|
public UpdateAccountInfoByIDAsyncTask(Context context, OnUpdateAccountInfoInterface onUpdateAccountInfoInterface){
|
||||||
|
this.context = context;
|
||||||
|
this.listener = onUpdateAccountInfoInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params) {
|
||||||
|
|
||||||
|
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
Account account = new API(context).getAccount(userId);
|
||||||
|
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
|
boolean userExists = new AccountDAO(context, db).userExist(account);
|
||||||
|
if( userExists) {
|
||||||
|
Account accountDb = new AccountDAO(context, db).getAccountByID(userId);
|
||||||
|
if( accountDb != null){
|
||||||
|
account.setInstance(accountDb.getInstance());
|
||||||
|
account.setToken(accountDb.getToken());
|
||||||
|
new AccountDAO(context, db).updateAccount(account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result) {
|
||||||
|
listener.onUpdateAccountInfo(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -173,20 +173,16 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
||||||
}
|
}
|
||||||
//Click on a conversation
|
//Click on a conversation
|
||||||
if( type != RetrieveFeedsAsyncTask.Type.CONTEXT ){
|
if( type != RetrieveFeedsAsyncTask.Type.CONTEXT ){
|
||||||
if( !status.getIn_reply_to_account_id().equals("null") || !status.getIn_reply_to_id().equals("null") ) {
|
holder.status_content.setOnClickListener(new View.OnClickListener() {
|
||||||
holder.status_content.setOnClickListener(new View.OnClickListener() {
|
@Override
|
||||||
@Override
|
public void onClick(View v) {
|
||||||
public void onClick(View v) {
|
Intent intent = new Intent(context, ShowConversationActivity.class);
|
||||||
Intent intent = new Intent(context, ShowConversationActivity.class);
|
Bundle b = new Bundle();
|
||||||
Bundle b = new Bundle();
|
b.putString("statusId", status.getId()); //Your id
|
||||||
b.putString("statusId", status.getId()); //Your id
|
intent.putExtras(b); //Put your id to your next Intent
|
||||||
intent.putExtras(b); //Put your id to your next Intent
|
context.startActivity(intent);
|
||||||
context.startActivity(intent);
|
}
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}else{
|
|
||||||
holder.status_content.setOnClickListener(null);
|
|
||||||
}
|
|
||||||
}else {
|
}else {
|
||||||
if( position == ShowConversationActivity.position){
|
if( position == ShowConversationActivity.position){
|
||||||
holder.main_container.setBackgroundResource(R.color.blue_light);
|
holder.main_container.setBackgroundResource(R.color.blue_light);
|
||||||
|
@ -410,6 +406,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
||||||
String url = attachment.getPreview_url();
|
String url = attachment.getPreview_url();
|
||||||
if( url == null || url.trim().equals(""))
|
if( url == null || url.trim().equals(""))
|
||||||
url = attachment.getUrl();
|
url = attachment.getUrl();
|
||||||
|
if( url.trim().equals("https://mastodon.etalab.gouv.fr/files/small/missing.png"))
|
||||||
|
continue;
|
||||||
imageLoader.displayImage(url, imageView, options);
|
imageLoader.displayImage(url, imageView, options);
|
||||||
imageView.setOnClickListener(new View.OnClickListener() {
|
imageView.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -27,7 +27,6 @@ import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
@ -123,7 +122,7 @@ public class Helper {
|
||||||
* Check if the user is connected to Internet
|
* Check if the user is connected to Internet
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public static boolean isConnectingToInternet(Context context) {
|
public static boolean isConnectedToInternet(Context context) {
|
||||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
NetworkInfo ni = cm.getActiveNetworkInfo();
|
NetworkInfo ni = cm.getActiveNetworkInfo();
|
||||||
if ( ni != null && ni.isConnected()) {
|
if ( ni != null && ni.isConnected()) {
|
||||||
|
|
Loading…
Reference in New Issue