mirror of
https://framagit.org/tom79/fedilab-tube
synced 2025-02-16 12:00:42 +01:00
Fix authentication
This commit is contained in:
parent
1f61e7f613
commit
dc9dc14fd5
@ -37,7 +37,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import app.fedilab.fedilabtube.asynctasks.RetrieveFeedsAsyncTask;
|
import app.fedilab.fedilabtube.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
import app.fedilab.fedilabtube.asynctasks.RetrievePeertubeInformationAsyncTask;
|
import app.fedilab.fedilabtube.asynctasks.RetrievePeertubeInformationAsyncTask;
|
||||||
import app.fedilab.fedilabtube.asynctasks.UpdateAccountInfoAsyncTask;
|
import app.fedilab.fedilabtube.client.PeertubeAPI;
|
||||||
import app.fedilab.fedilabtube.client.entities.Account;
|
import app.fedilab.fedilabtube.client.entities.Account;
|
||||||
import app.fedilab.fedilabtube.helper.Helper;
|
import app.fedilab.fedilabtube.helper.Helper;
|
||||||
import app.fedilab.fedilabtube.sqlite.AccountDAO;
|
import app.fedilab.fedilabtube.sqlite.AccountDAO;
|
||||||
@ -110,8 +110,10 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
String instance = Helper.getLiveInstance(MainActivity.this);
|
String instance = Helper.getLiveInstance(MainActivity.this);
|
||||||
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();
|
||||||
Account account = new AccountDAO(MainActivity.this, db).getUniqAccount(userId, instance);
|
Account account = new AccountDAO(MainActivity.this, db).getUniqAccount(userId, instance);
|
||||||
if( account != null) {
|
if (account != null) {
|
||||||
new UpdateAccountInfoAsyncTask(MainActivity.this, account.getToken(), account.getClient_id(), account.getClient_secret(), account.getRefresh_token(), account.getInstance()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new Thread(() -> {
|
||||||
|
new PeertubeAPI(MainActivity.this).refreshToken(account.getToken(), account.getInstance());
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
instanceItem.setVisible(true);
|
instanceItem.setVisible(true);
|
||||||
|
@ -176,7 +176,7 @@ public class PeertubeActivity extends AppCompatActivity implements OnRetrievePee
|
|||||||
peertube_playlist.setVisibility(View.VISIBLE);
|
peertube_playlist.setVisibility(View.VISIBLE);
|
||||||
peertube_bookmark.setVisibility(View.GONE);
|
peertube_bookmark.setVisibility(View.GONE);
|
||||||
|
|
||||||
if( Helper.isTablet(PeertubeActivity.this)) {
|
if (Helper.isTablet(PeertubeActivity.this)) {
|
||||||
RelativeLayout video_container = findViewById(R.id.video_container);
|
RelativeLayout video_container = findViewById(R.id.video_container);
|
||||||
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
|
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
@ -307,7 +307,7 @@ public class PeertubeActivity extends AppCompatActivity implements OnRetrievePee
|
|||||||
if (item.getItemId() == android.R.id.home) {
|
if (item.getItemId() == android.R.id.home) {
|
||||||
finish();
|
finish();
|
||||||
return true;
|
return true;
|
||||||
}else if (item.getItemId() == R.id.action_report) {
|
} else if (item.getItemId() == R.id.action_report) {
|
||||||
androidx.appcompat.app.AlertDialog.Builder dialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(PeertubeActivity.this);
|
androidx.appcompat.app.AlertDialog.Builder dialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(PeertubeActivity.this);
|
||||||
LayoutInflater inflater1 = getLayoutInflater();
|
LayoutInflater inflater1 = getLayoutInflater();
|
||||||
View dialogView = inflater1.inflate(R.layout.popup_report_choice, new LinearLayout(PeertubeActivity.this), false);
|
View dialogView = inflater1.inflate(R.layout.popup_report_choice, new LinearLayout(PeertubeActivity.this), false);
|
||||||
@ -324,25 +324,29 @@ public class PeertubeActivity extends AppCompatActivity implements OnRetrievePee
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reportAlert(PeertubeAPI.reportType type, androidx.appcompat.app.AlertDialog alertDialog){
|
private void reportAlert(PeertubeAPI.reportType type, androidx.appcompat.app.AlertDialog alertDialog) {
|
||||||
androidx.appcompat.app.AlertDialog.Builder dialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(PeertubeActivity.this);
|
androidx.appcompat.app.AlertDialog.Builder dialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(PeertubeActivity.this);
|
||||||
LayoutInflater inflater1 = getLayoutInflater();
|
LayoutInflater inflater1 = getLayoutInflater();
|
||||||
View dialogView = inflater1.inflate(R.layout.popup_report, new LinearLayout(PeertubeActivity.this), false);
|
View dialogView = inflater1.inflate(R.layout.popup_report, new LinearLayout(PeertubeActivity.this), false);
|
||||||
dialogBuilder.setView(dialogView);
|
dialogBuilder.setView(dialogView);
|
||||||
EditText report_content = dialogView.findViewById(R.id.report_content);
|
EditText report_content = dialogView.findViewById(R.id.report_content);
|
||||||
dialogBuilder.setNeutralButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
|
dialogBuilder.setNeutralButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
|
||||||
androidx.appcompat.app.AlertDialog alertDialog2 = dialogBuilder.create();
|
|
||||||
dialogBuilder.setPositiveButton(R.string.report, (dialog, id) -> {
|
dialogBuilder.setPositiveButton(R.string.report, (dialog, id) -> {
|
||||||
if( type == PeertubeAPI.reportType.VIDEO) {
|
if (report_content.getText().toString().trim().length() == 0) {
|
||||||
new PostActionAsyncTask(PeertubeActivity.this, PeertubeAPI.StatusAction.REPORT_VIDEO, peertube.getId(), report_content.getText().toString(), PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
Toasty.info(PeertubeActivity.this, getString(R.string.report_comment_size), Toasty.LENGTH_LONG).show();
|
||||||
alertDialog.dismiss();
|
} else {
|
||||||
alertDialog2.dismiss();
|
if (type == PeertubeAPI.reportType.VIDEO) {
|
||||||
}else if (type == PeertubeAPI.reportType.ACCOUNT) {
|
new PostActionAsyncTask(PeertubeActivity.this, PeertubeAPI.StatusAction.REPORT_VIDEO, peertube.getId(), report_content.getText().toString(), PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
new PostActionAsyncTask(PeertubeActivity.this, PeertubeAPI.StatusAction.REPORT_ACCOUNT, peertube.getAccount().getId(), report_content.getText().toString(), PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
alertDialog.dismiss();
|
||||||
alertDialog.dismiss();
|
dialog.dismiss();
|
||||||
alertDialog2.dismiss();
|
} else if (type == PeertubeAPI.reportType.ACCOUNT) {
|
||||||
|
new PostActionAsyncTask(PeertubeActivity.this, PeertubeAPI.StatusAction.REPORT_ACCOUNT, peertube.getAccount().getId(), report_content.getText().toString(), PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
alertDialog.dismiss();
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
androidx.appcompat.app.AlertDialog alertDialog2 = dialogBuilder.create();
|
||||||
alertDialog2.show();
|
alertDialog2.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -743,9 +747,9 @@ public class PeertubeActivity extends AppCompatActivity implements OnRetrievePee
|
|||||||
|
|
||||||
if (peertube.isCommentsEnabled() && statusAction == PeertubeAPI.StatusAction.PEERTUBECOMMENT) {
|
if (peertube.isCommentsEnabled() && statusAction == PeertubeAPI.StatusAction.PEERTUBECOMMENT) {
|
||||||
new RetrievePeertubeSingleCommentsAsyncTask(PeertubeActivity.this, peertubeInstance, videoId, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new RetrievePeertubeSingleCommentsAsyncTask(PeertubeActivity.this, peertubeInstance, videoId, PeertubeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}else if( statusAction == PeertubeAPI.StatusAction.REPORT_ACCOUNT) {
|
} else if (statusAction == PeertubeAPI.StatusAction.REPORT_ACCOUNT) {
|
||||||
Toasty.success(PeertubeActivity.this, getString(R.string.successful_report), Toasty.LENGTH_LONG).show();
|
Toasty.success(PeertubeActivity.this, getString(R.string.successful_report), Toasty.LENGTH_LONG).show();
|
||||||
}else if( statusAction == PeertubeAPI.StatusAction.REPORT_VIDEO) {
|
} else if (statusAction == PeertubeAPI.StatusAction.REPORT_VIDEO) {
|
||||||
Toasty.success(PeertubeActivity.this, getString(R.string.successful_video_report), Toasty.LENGTH_LONG).show();
|
Toasty.success(PeertubeActivity.this, getString(R.string.successful_video_report), Toasty.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,9 +78,9 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
|
|||||||
targetedId = comment;
|
targetedId = comment;
|
||||||
} else if (apiAction == PeertubeAPI.StatusAction.PEERTUBEDELETEVIDEO) {
|
} else if (apiAction == PeertubeAPI.StatusAction.PEERTUBEDELETEVIDEO) {
|
||||||
statusCode = peertubeAPI.deleteVideo(targetedId);
|
statusCode = peertubeAPI.deleteVideo(targetedId);
|
||||||
}else if (apiAction == PeertubeAPI.StatusAction.REPORT_ACCOUNT) {
|
} else if (apiAction == PeertubeAPI.StatusAction.REPORT_ACCOUNT) {
|
||||||
statusCode = peertubeAPI.report(PeertubeAPI.reportType.ACCOUNT, targetedId, comment);
|
statusCode = peertubeAPI.report(PeertubeAPI.reportType.ACCOUNT, targetedId, comment);
|
||||||
}else if (apiAction == PeertubeAPI.StatusAction.REPORT_VIDEO) {
|
} else if (apiAction == PeertubeAPI.StatusAction.REPORT_VIDEO) {
|
||||||
statusCode = peertubeAPI.report(PeertubeAPI.reportType.VIDEO, targetedId, comment);
|
statusCode = peertubeAPI.report(PeertubeAPI.reportType.VIDEO, targetedId, comment);
|
||||||
}
|
}
|
||||||
error = peertubeAPI.getError();
|
error = peertubeAPI.getError();
|
||||||
|
@ -14,6 +14,7 @@ package app.fedilab.fedilabtube.client;
|
|||||||
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
|
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
|
||||||
* see <http://www.gnu.org/licenses>. */
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
@ -77,12 +78,6 @@ public class PeertubeAPI {
|
|||||||
private APIResponse apiResponse;
|
private APIResponse apiResponse;
|
||||||
private Error APIError;
|
private Error APIError;
|
||||||
|
|
||||||
public enum reportType {
|
|
||||||
ACCOUNT,
|
|
||||||
COMMENT,
|
|
||||||
VIDEO
|
|
||||||
}
|
|
||||||
|
|
||||||
public PeertubeAPI(Context context) {
|
public PeertubeAPI(Context context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
@ -723,6 +718,68 @@ public class PeertubeAPI {
|
|||||||
return peertubeInformation;
|
return peertubeInformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh token and update user data
|
||||||
|
*
|
||||||
|
* @param token String
|
||||||
|
* @param instance String
|
||||||
|
*/
|
||||||
|
public void refreshToken(String token, String instance) {
|
||||||
|
|
||||||
|
SQLiteDatabase db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
|
if (token == null) {
|
||||||
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
String instanceC = Helper.getLiveInstance(context);
|
||||||
|
Account accountToLogout = new AccountDAO(context, db).getUniqAccount(userId, instanceC);
|
||||||
|
Helper.logoutCurrentUser((Activity) context, accountToLogout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Account targetedAccount = new AccountDAO(context, db).getAccountByToken(token);
|
||||||
|
String newToken = null, newRefreshToken = null;
|
||||||
|
if (targetedAccount != null) {
|
||||||
|
HashMap<String, String> values = refreshToken(targetedAccount.getClient_id(), targetedAccount.getClient_secret(), targetedAccount.getRefresh_token());
|
||||||
|
if (values.containsKey("access_token") && values.get("access_token") != null) {
|
||||||
|
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
//This account is currently logged in, the token is updated
|
||||||
|
if (values.get("access_token") != null) {
|
||||||
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
|
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, values.get("access_token"));
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (values.containsKey("refresh_token") && values.get("refresh_token") != null) {
|
||||||
|
newRefreshToken = values.get("refresh_token");
|
||||||
|
}
|
||||||
|
if (values.containsKey("access_token") && values.get("access_token") != null) {
|
||||||
|
newToken = values.get("access_token");
|
||||||
|
}
|
||||||
|
String response;
|
||||||
|
try {
|
||||||
|
response = new HttpsConnection(context).get("https://" + instance + "/api/v1/users/me", 60, null, newToken);
|
||||||
|
JSONObject accountObject = new JSONObject(response).getJSONObject("account");
|
||||||
|
account = parseAccountResponsePeertube(accountObject);
|
||||||
|
} catch (IOException | NoSuchAlgorithmException | KeyManagementException | JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (HttpsConnection.HttpsConnectionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
//setError(e.getStatusCode(), e);
|
||||||
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
String instanceC = Helper.getLiveInstance(context);
|
||||||
|
Account accountToLogout = new AccountDAO(context, db).getUniqAccount(userId, instanceC);
|
||||||
|
Helper.logoutCurrentUser((Activity) context, accountToLogout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (newRefreshToken != null && newToken != null) {
|
||||||
|
account.setRefresh_token(newRefreshToken);
|
||||||
|
account.setToken(newToken);
|
||||||
|
}
|
||||||
|
new AccountDAO(context, db).updateAccount(account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Verifiy credential of the authenticated user *synchronously*
|
* Verifiy credential of the authenticated user *synchronously*
|
||||||
* @return Account
|
* @return Account
|
||||||
@ -736,52 +793,16 @@ public class PeertubeAPI {
|
|||||||
} catch (NoSuchAlgorithmException | IOException | KeyManagementException | JSONException e) {
|
} catch (NoSuchAlgorithmException | IOException | KeyManagementException | JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (HttpsConnection.HttpsConnectionException e) {
|
} catch (HttpsConnection.HttpsConnectionException e) {
|
||||||
if (e.getStatusCode() == 401 || e.getStatusCode() == 403) {
|
setError(e.getStatusCode(), e);
|
||||||
SQLiteDatabase db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
|
||||||
Account targetedAccount = new AccountDAO(context, db).getAccountByToken(token);
|
|
||||||
if (targetedAccount != null) {
|
|
||||||
HashMap<String, String> values = refreshToken(targetedAccount.getClient_id(), targetedAccount.getClient_secret(), targetedAccount.getRefresh_token());
|
|
||||||
if (values.containsKey("access_token") && values.get("access_token") != null) {
|
|
||||||
targetedAccount.setToken(values.get("access_token"));
|
|
||||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
|
||||||
String tokenShared = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
|
|
||||||
//This account is currently logged in, the token is updated
|
|
||||||
if (tokenShared != null && token.compareTo(tokenShared) == 0) {
|
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
||||||
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, targetedAccount.getToken());
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (values.containsKey("refresh_token") && values.get("refresh_token") != null)
|
|
||||||
targetedAccount.setRefresh_token(values.get("refresh_token"));
|
|
||||||
new AccountDAO(context, db).updateAccount(targetedAccount);
|
|
||||||
|
|
||||||
String response;
|
|
||||||
try {
|
|
||||||
response = new HttpsConnection(context).get("https://" + instance + "/api/v1/users/me", 60, null, targetedAccount.getToken());
|
|
||||||
JSONObject accountObject = new JSONObject(response).getJSONObject("account");
|
|
||||||
account = parseAccountResponsePeertube(accountObject);
|
|
||||||
} catch (IOException | NoSuchAlgorithmException | KeyManagementException | JSONException e1) {
|
|
||||||
e1.printStackTrace();
|
|
||||||
} catch (HttpsConnection.HttpsConnectionException e1) {
|
|
||||||
e1.printStackTrace();
|
|
||||||
setError(e.getStatusCode(), e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setError(e.getStatusCode(), e);
|
|
||||||
}
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int report(reportType type, String id, String reason) {
|
public int report(reportType type, String id, String reason) {
|
||||||
actionCode = -1;
|
actionCode = -1;
|
||||||
try {
|
try {
|
||||||
HashMap<String, String> params = new HashMap<>();
|
HashMap<String, String> params = new HashMap<>();
|
||||||
switch (type){
|
switch (type) {
|
||||||
case VIDEO:
|
case VIDEO:
|
||||||
params.put("video", id);
|
params.put("video", id);
|
||||||
break;
|
break;
|
||||||
@ -840,11 +861,13 @@ public class PeertubeAPI {
|
|||||||
String response = new HttpsConnection(context).post(getAbsoluteUrl("/users/token"), 60, params, null);
|
String response = new HttpsConnection(context).post(getAbsoluteUrl("/users/token"), 60, params, null);
|
||||||
JSONObject resobj = new JSONObject(response);
|
JSONObject resobj = new JSONObject(response);
|
||||||
String token = resobj.getString("access_token");
|
String token = resobj.getString("access_token");
|
||||||
if (resobj.has("refresh_token"))
|
String refresh = resobj.getString("refresh_token");
|
||||||
refresh_token = resobj.getString("refresh_token");
|
|
||||||
newValues.put("access_token", token);
|
newValues.put("access_token", token);
|
||||||
newValues.put("refresh_token", refresh_token);
|
newValues.put("refresh_token", refresh);
|
||||||
} catch (NoSuchAlgorithmException | IOException | KeyManagementException | JSONException | HttpsConnection.HttpsConnectionException e) {
|
} catch (NoSuchAlgorithmException | IOException | KeyManagementException | JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (HttpsConnection.HttpsConnectionException e) {
|
||||||
|
setError(e.getStatusCode(), e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return newValues;
|
return newValues;
|
||||||
@ -1740,7 +1763,6 @@ public class PeertubeAPI {
|
|||||||
return peertubeNotifications;
|
return peertubeNotifications;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse json response for several howto
|
* Parse json response for several howto
|
||||||
*
|
*
|
||||||
@ -1866,6 +1888,12 @@ public class PeertubeAPI {
|
|||||||
return Helper.instanceWithProtocol(context) + "/api/v1" + action;
|
return Helper.instanceWithProtocol(context) + "/api/v1" + action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum reportType {
|
||||||
|
ACCOUNT,
|
||||||
|
COMMENT,
|
||||||
|
VIDEO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public enum StatusAction {
|
public enum StatusAction {
|
||||||
FOLLOW,
|
FOLLOW,
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:padding="@dimen/popup_padding"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<EditText
|
<EditText
|
||||||
android:hint="@string/report_helper"
|
android:hint="@string/report_helper"
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:padding="@dimen/popup_padding"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<Button
|
<Button
|
||||||
style="@style/Base.Widget.AppCompat.Button.Colored"
|
style="@style/Base.Widget.AppCompat.Button.Colored"
|
||||||
|
@ -9,4 +9,5 @@
|
|||||||
<dimen name="video_padding">0dp</dimen>
|
<dimen name="video_padding">0dp</dimen>
|
||||||
<bool name="is_tablet">false</bool>
|
<bool name="is_tablet">false</bool>
|
||||||
<dimen name="video_comment_margin">0dp</dimen>
|
<dimen name="video_comment_margin">0dp</dimen>
|
||||||
|
<dimen name="popup_padding">20dp</dimen>
|
||||||
</resources>
|
</resources>
|
@ -173,4 +173,5 @@
|
|||||||
<string name="report_helper">Quelques explications concernant votre signalement…</string>
|
<string name="report_helper">Quelques explications concernant votre signalement…</string>
|
||||||
<string name="successful_report">Le compte a été signalé !</string>
|
<string name="successful_report">Le compte a été signalé !</string>
|
||||||
<string name="successful_video_report">La vidéo a été signalée !</string>
|
<string name="successful_video_report">La vidéo a été signalée !</string>
|
||||||
|
<string name="report_comment_size">Veuillez préciser les raisons.</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user