Dark and light themes now exist and can be switched in preferences.
This commit is contained in:
parent
79b3d83368
commit
96a5692717
30 changed files with 408 additions and 252 deletions
|
@ -25,7 +25,6 @@ import android.support.design.widget.Snackbar;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.text.method.LinkMovementMethod;
|
import android.text.method.LinkMovementMethod;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
@ -50,7 +49,7 @@ import org.json.JSONObject;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class AccountActivity extends AppCompatActivity {
|
public class AccountActivity extends BaseActivity {
|
||||||
private static final String TAG = "AccountActivity"; // logging tag
|
private static final String TAG = "AccountActivity"; // logging tag
|
||||||
|
|
||||||
private String domain;
|
private String domain;
|
||||||
|
|
58
app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
Normal file
58
app/src/main/java/com/keylesspalace/tusky/BaseActivity.java
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/* Copyright 2017 Andrew Dawson
|
||||||
|
*
|
||||||
|
* This file is part of Tusky.
|
||||||
|
*
|
||||||
|
* Tusky 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.
|
||||||
|
*
|
||||||
|
* Tusky 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 Tusky. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
package com.keylesspalace.tusky;
|
||||||
|
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.Menu;
|
||||||
|
|
||||||
|
/* There isn't presently a way to globally change the theme of a whole application at runtime, just
|
||||||
|
* individual activities. So, each activity has to set its theme before any views are created. And
|
||||||
|
* the most expedient way to accomplish this was to put it in a base class and just have every
|
||||||
|
* activity extend from it. */
|
||||||
|
public class BaseActivity extends AppCompatActivity {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("lightTheme", false)) {
|
||||||
|
setTheme(R.style.AppTheme_Light);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
TypedValue value = new TypedValue();
|
||||||
|
int color;
|
||||||
|
if (getTheme().resolveAttribute(R.attr.toolbar_icon_tint, value, true)) {
|
||||||
|
color = value.data;
|
||||||
|
} else {
|
||||||
|
color = Color.WHITE;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < menu.size(); i++) {
|
||||||
|
Drawable icon = menu.getItem(i).getIcon();
|
||||||
|
if (icon != null) {
|
||||||
|
icon.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.content.res.TypedArray;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
@ -40,12 +41,12 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
|
import android.util.TypedValue;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.MimeTypeMap;
|
import android.webkit.MimeTypeMap;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
@ -71,18 +72,14 @@ import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class ComposeActivity extends AppCompatActivity {
|
public class ComposeActivity extends BaseActivity {
|
||||||
private static final int STATUS_CHARACTER_LIMIT = 500;
|
private static final int STATUS_CHARACTER_LIMIT = 500;
|
||||||
private static final int STATUS_MEDIA_SIZE_LIMIT = 4000000; // 4MB
|
private static final int STATUS_MEDIA_SIZE_LIMIT = 4000000; // 4MB
|
||||||
private static final int MEDIA_PICK_RESULT = 1;
|
private static final int MEDIA_PICK_RESULT = 1;
|
||||||
|
@ -103,64 +100,28 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
private View contentWarningBar;
|
private View contentWarningBar;
|
||||||
|
|
||||||
private static class QueuedMedia {
|
private static class QueuedMedia {
|
||||||
public enum Type {
|
enum Type {
|
||||||
IMAGE,
|
IMAGE,
|
||||||
VIDEO
|
VIDEO
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ReadyStage {
|
enum ReadyStage {
|
||||||
DOWNSIZING,
|
DOWNSIZING,
|
||||||
UPLOADING,
|
UPLOADING,
|
||||||
}
|
}
|
||||||
|
|
||||||
private Type type;
|
Type type;
|
||||||
private ImageView preview;
|
ImageView preview;
|
||||||
private Uri uri;
|
Uri uri;
|
||||||
private String id;
|
String id;
|
||||||
private ReadyStage readyStage;
|
ReadyStage readyStage;
|
||||||
private byte[] content;
|
byte[] content;
|
||||||
|
|
||||||
public QueuedMedia(Type type, Uri uri, ImageView preview) {
|
QueuedMedia(Type type, Uri uri, ImageView preview) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.preview = preview;
|
this.preview = preview;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Type getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImageView getPreview() {
|
|
||||||
return preview;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Uri getUri() {
|
|
||||||
return uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getContent() {
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReadyStage getReadyStage() {
|
|
||||||
return readyStage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReadyStage(ReadyStage readyStage) {
|
|
||||||
this.readyStage = readyStage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setContent(byte[] content) {
|
|
||||||
this.content = content;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doErrorDialog(int descriptionId, int actionId, View.OnClickListener listener) {
|
private void doErrorDialog(int descriptionId, int actionId, View.OnClickListener listener) {
|
||||||
|
@ -175,10 +136,10 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class FindCharsResult {
|
private static class FindCharsResult {
|
||||||
public int charIndex;
|
int charIndex;
|
||||||
public int stringIndex;
|
int stringIndex;
|
||||||
|
|
||||||
public FindCharsResult() {
|
FindCharsResult() {
|
||||||
charIndex = -1;
|
charIndex = -1;
|
||||||
stringIndex = -1;
|
stringIndex = -1;
|
||||||
}
|
}
|
||||||
|
@ -281,6 +242,15 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int getThemeColor(Context context, int attribute) {
|
||||||
|
TypedValue value = new TypedValue();
|
||||||
|
if (context.getTheme().resolveAttribute(attribute, value, true)) {
|
||||||
|
return value.data;
|
||||||
|
} else {
|
||||||
|
return android.R.color.black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -300,7 +270,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
|
|
||||||
textEditor = (EditText) findViewById(R.id.field_status);
|
textEditor = (EditText) findViewById(R.id.field_status);
|
||||||
final TextView charactersLeft = (TextView) findViewById(R.id.characters_left);
|
final TextView charactersLeft = (TextView) findViewById(R.id.characters_left);
|
||||||
final int mentionColour = ContextCompat.getColor(this, R.color.compose_mention);
|
final int mentionColour = getThemeColor(this, R.attr.compose_mention_color);
|
||||||
TextWatcher textEditorWatcher = new TextWatcher() {
|
TextWatcher textEditorWatcher = new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
|
@ -414,7 +384,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
JSONArray media_ids = new JSONArray();
|
JSONArray media_ids = new JSONArray();
|
||||||
for (QueuedMedia item : mediaQueued) {
|
for (QueuedMedia item : mediaQueued) {
|
||||||
media_ids.put(item.getId());
|
media_ids.put(item.id);
|
||||||
}
|
}
|
||||||
if (media_ids.length() > 0) {
|
if (media_ids.length() > 0) {
|
||||||
parameters.put("media_ids", media_ids);
|
parameters.put("media_ids", media_ids);
|
||||||
|
@ -429,7 +399,8 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
public void onResponse(JSONObject response) {
|
public void onResponse(JSONObject response) {
|
||||||
onSendSuccess();
|
onSendSuccess();
|
||||||
}
|
}
|
||||||
}, new Response.ErrorListener() {
|
},
|
||||||
|
new Response.ErrorListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onErrorResponse(VolleyError error) {
|
public void onErrorResponse(VolleyError error) {
|
||||||
onSendFailure();
|
onSendFailure();
|
||||||
|
@ -454,8 +425,8 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
textEditor.setError(getString(R.string.error_sending_status));
|
textEditor.setError(getString(R.string.error_sending_status));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readyStatus(final String content, final String visibility,
|
private void readyStatus(final String content, final String visibility, final boolean sensitive,
|
||||||
final boolean sensitive, final String spoilerText) {
|
final String spoilerText) {
|
||||||
final ProgressDialog dialog = ProgressDialog.show(
|
final ProgressDialog dialog = ProgressDialog.show(
|
||||||
this, getString(R.string.dialog_title_finishing_media_upload),
|
this, getString(R.string.dialog_title_finishing_media_upload),
|
||||||
getString(R.string.dialog_message_uploading_media), true, true);
|
getString(R.string.dialog_message_uploading_media), true, true);
|
||||||
|
@ -570,7 +541,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
|
|
||||||
private void addMediaToQueue(QueuedMedia.Type type, Bitmap preview, Uri uri, long mediaSize) {
|
private void addMediaToQueue(QueuedMedia.Type type, Bitmap preview, Uri uri, long mediaSize) {
|
||||||
final QueuedMedia item = new QueuedMedia(type, uri, new ImageView(this));
|
final QueuedMedia item = new QueuedMedia(type, uri, new ImageView(this));
|
||||||
ImageView view = item.getPreview();
|
ImageView view = item.preview;
|
||||||
Resources resources = getResources();
|
Resources resources = getResources();
|
||||||
int side = resources.getDimensionPixelSize(R.dimen.compose_media_preview_side);
|
int side = resources.getDimensionPixelSize(R.dimen.compose_media_preview_side);
|
||||||
int margin = resources.getDimensionPixelSize(R.dimen.compose_media_preview_margin);
|
int margin = resources.getDimensionPixelSize(R.dimen.compose_media_preview_margin);
|
||||||
|
@ -598,7 +569,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
textEditor.setPadding(textEditor.getPaddingLeft(), textEditor.getPaddingTop(),
|
textEditor.setPadding(textEditor.getPaddingLeft(), textEditor.getPaddingTop(),
|
||||||
textEditor.getPaddingRight(), totalHeight);
|
textEditor.getPaddingRight(), totalHeight);
|
||||||
// If there's one video in the queue it is full, so disable the button to queue more.
|
// If there's one video in the queue it is full, so disable the button to queue more.
|
||||||
if (item.getType() == QueuedMedia.Type.VIDEO) {
|
if (item.type == QueuedMedia.Type.VIDEO) {
|
||||||
disableMediaPicking();
|
disableMediaPicking();
|
||||||
}
|
}
|
||||||
} else if (queuedCount >= Status.MAX_MEDIA_ATTACHMENTS) {
|
} else if (queuedCount >= Status.MAX_MEDIA_ATTACHMENTS) {
|
||||||
|
@ -617,7 +588,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeMediaFromQueue(QueuedMedia item) {
|
private void removeMediaFromQueue(QueuedMedia item) {
|
||||||
mediaPreviewBar.removeView(item.getPreview());
|
mediaPreviewBar.removeView(item.preview);
|
||||||
mediaQueued.remove(item);
|
mediaQueued.remove(item);
|
||||||
if (mediaQueued.size() == 0) {
|
if (mediaQueued.size() == 0) {
|
||||||
showMarkSensitive(false);
|
showMarkSensitive(false);
|
||||||
|
@ -639,10 +610,10 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downsizeMedia(final QueuedMedia item) {
|
private void downsizeMedia(final QueuedMedia item) {
|
||||||
item.setReadyStage(QueuedMedia.ReadyStage.DOWNSIZING);
|
item.readyStage = QueuedMedia.ReadyStage.DOWNSIZING;
|
||||||
InputStream stream;
|
InputStream stream;
|
||||||
try {
|
try {
|
||||||
stream = getContentResolver().openInputStream(item.getUri());
|
stream = getContentResolver().openInputStream(item.uri);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
onMediaDownsizeFailure(item);
|
onMediaDownsizeFailure(item);
|
||||||
return;
|
return;
|
||||||
|
@ -652,7 +623,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
new DownsizeImageTask(STATUS_MEDIA_SIZE_LIMIT, new DownsizeImageTask.Listener() {
|
new DownsizeImageTask(STATUS_MEDIA_SIZE_LIMIT, new DownsizeImageTask.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<byte[]> contentList) {
|
public void onSuccess(List<byte[]> contentList) {
|
||||||
item.setContent(contentList.get(0));
|
item.content = contentList.get(0);
|
||||||
uploadMedia(item);
|
uploadMedia(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +666,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void uploadMedia(final QueuedMedia item) {
|
private void uploadMedia(final QueuedMedia item) {
|
||||||
item.setReadyStage(QueuedMedia.ReadyStage.UPLOADING);
|
item.readyStage = QueuedMedia.ReadyStage.UPLOADING;
|
||||||
|
|
||||||
String endpoint = getString(R.string.endpoint_media);
|
String endpoint = getString(R.string.endpoint_media);
|
||||||
String url = "https://" + domain + endpoint;
|
String url = "https://" + domain + endpoint;
|
||||||
|
@ -714,7 +685,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(JSONObject response) {
|
public void onResponse(JSONObject response) {
|
||||||
try {
|
try {
|
||||||
item.setId(response.getString("id"));
|
item.id = response.getString("id");
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
onUploadFailure(item);
|
onUploadFailure(item);
|
||||||
return;
|
return;
|
||||||
|
@ -736,11 +707,11 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataItem getData() {
|
public DataItem getData() {
|
||||||
byte[] content = item.getContent();
|
byte[] content = item.content;
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
InputStream stream;
|
InputStream stream;
|
||||||
try {
|
try {
|
||||||
stream = getContentResolver().openInputStream(item.getUri());
|
stream = getContentResolver().openInputStream(item.uri);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -758,7 +729,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
request.addMarker("media_" + item.getUri().toString());
|
request.addMarker("media_" + item.uri.toString());
|
||||||
VolleySingleton.getInstance(this).addToRequestQueue(request);
|
VolleySingleton.getInstance(this).addToRequestQueue(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -768,8 +739,8 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelReadyingMedia(QueuedMedia item) {
|
private void cancelReadyingMedia(QueuedMedia item) {
|
||||||
if (item.getReadyStage() == QueuedMedia.ReadyStage.UPLOADING) {
|
if (item.readyStage == QueuedMedia.ReadyStage.UPLOADING) {
|
||||||
VolleySingleton.getInstance(this).cancelRequest("media_" + item.getUri().toString());
|
VolleySingleton.getInstance(this).cancelRequest("media_" + item.uri.toString());
|
||||||
}
|
}
|
||||||
waitForMediaLatch.countDown();
|
waitForMediaLatch.countDown();
|
||||||
}
|
}
|
||||||
|
@ -799,7 +770,7 @@ public class ComposeActivity extends AppCompatActivity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mediaQueued.size() > 0
|
if (mediaQueued.size() > 0
|
||||||
&& mediaQueued.get(0).getType() == QueuedMedia.Type.IMAGE) {
|
&& mediaQueued.get(0).type == QueuedMedia.Type.IMAGE) {
|
||||||
displayTransientError(R.string.error_media_upload_image_or_video);
|
displayTransientError(R.string.error_media_upload_image_or_video);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
@ -42,7 +41,7 @@ import java.net.URLEncoder;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class LoginActivity extends AppCompatActivity {
|
public class LoginActivity extends BaseActivity {
|
||||||
private static final String TAG = "LoginActivity";
|
private static final String TAG = "LoginActivity";
|
||||||
private static String OAUTH_SCOPES = "read write follow";
|
private static String OAUTH_SCOPES = "read write follow";
|
||||||
|
|
||||||
|
@ -279,7 +278,7 @@ public class LoginActivity extends AppCompatActivity {
|
||||||
errorText.setText(error);
|
errorText.setText(error);
|
||||||
} else {
|
} else {
|
||||||
// This case means a junk response was received somehow.
|
// This case means a junk response was received somehow.
|
||||||
errorText.setText("An unidentified authorization error occurred.");
|
errorText.setText(getString(R.string.error_authorization_unknown));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,10 +24,8 @@ import android.os.SystemClock;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
@ -43,7 +41,7 @@ import org.json.JSONObject;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends BaseActivity {
|
||||||
private static final String TAG = "MainActivity"; // logging tag
|
private static final String TAG = "MainActivity"; // logging tag
|
||||||
|
|
||||||
private AlarmManager alarmManager;
|
private AlarmManager alarmManager;
|
||||||
|
@ -102,20 +100,6 @@ public class MainActivity extends AppCompatActivity {
|
||||||
} else {
|
} else {
|
||||||
alarmManager.cancel(serviceAlarmIntent);
|
alarmManager.cancel(serviceAlarmIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @Unused: for Firebase Push Notifications
|
|
||||||
Log.d(TAG, "token " + FirebaseInstanceId.getInstance().getToken());
|
|
||||||
|
|
||||||
// Check if it's necessary to register for push notifications for this instance.
|
|
||||||
boolean registered = preferences.getBoolean("firebaseRegistered", false);
|
|
||||||
if (!registered) {
|
|
||||||
String registrationId = preferences.getString("firebaseRegistrationId", null);
|
|
||||||
if (registrationId == null) {
|
|
||||||
registrationId = FirebaseInstanceId.getInstance().getToken();
|
|
||||||
}
|
|
||||||
sendRegistrationToServer(registrationId, true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fetchUserInfo() {
|
private void fetchUserInfo() {
|
||||||
|
@ -180,71 +164,6 @@ public class MainActivity extends AppCompatActivity {
|
||||||
Log.e(TAG, "Failed to fetch user info. " + exception.getMessage());
|
Log.e(TAG, "Failed to fetch user info. " + exception.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @Unused: For Firebase push notifications, useless for now.
|
|
||||||
private void sendRegistrationToServer(String token, final boolean register) {
|
|
||||||
SharedPreferences preferences = getSharedPreferences(
|
|
||||||
getString(R.string.preferences_file_key), Context.MODE_PRIVATE);
|
|
||||||
String domain = preferences.getString("domain", null);
|
|
||||||
final String accessToken = preferences.getString("accessToken", null);
|
|
||||||
|
|
||||||
String endpoint;
|
|
||||||
if (register) {
|
|
||||||
endpoint = getString(R.string.endpoint_devices_register);
|
|
||||||
} else {
|
|
||||||
endpoint = getString(R.string.endpoint_devices_unregister);
|
|
||||||
}
|
|
||||||
String url = "https://" + domain + endpoint;
|
|
||||||
JSONObject formData = new JSONObject();
|
|
||||||
try {
|
|
||||||
formData.put("registration_id", token);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
onSendRegistrationToServerFailure();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, formData,
|
|
||||||
new Response.Listener<JSONObject>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(JSONObject response) {
|
|
||||||
onSendRegistrationToServerSuccess(response, register);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new Response.ErrorListener() {
|
|
||||||
@Override
|
|
||||||
public void onErrorResponse(VolleyError error) {
|
|
||||||
onSendRegistrationToServerFailure();
|
|
||||||
}
|
|
||||||
}) {
|
|
||||||
@Override
|
|
||||||
public Map<String, String> getHeaders() throws AuthFailureError {
|
|
||||||
Map<String, String> headers = new HashMap<>();
|
|
||||||
headers.put("Authorization", "Bearer " + accessToken);
|
|
||||||
return headers;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
VolleySingleton.getInstance(this).addToRequestQueue(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onSendRegistrationToServerSuccess(JSONObject response, boolean register) {
|
|
||||||
String registeredWord;
|
|
||||||
if (register) {
|
|
||||||
registeredWord = "registration";
|
|
||||||
} else {
|
|
||||||
registeredWord = "unregistration";
|
|
||||||
}
|
|
||||||
Log.d(TAG, String.format("Firebase %s is confirmed with the Mastodon instance. %s",
|
|
||||||
registeredWord, response.toString()));
|
|
||||||
SharedPreferences preferences = getSharedPreferences(
|
|
||||||
getString(R.string.preferences_file_key), Context.MODE_PRIVATE);
|
|
||||||
SharedPreferences.Editor editor = preferences.edit();
|
|
||||||
editor.putBoolean("firebaseRegistered", register);
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onSendRegistrationToServerFailure() {
|
|
||||||
Log.d(TAG, "Firebase registration with the Mastodon instance failed");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
private void compose() {
|
private void compose() {
|
||||||
Intent intent = new Intent(this, ComposeActivity.class);
|
Intent intent = new Intent(this, ComposeActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
|
|
@ -15,16 +15,79 @@
|
||||||
|
|
||||||
package com.keylesspalace.tusky;
|
package com.keylesspalace.tusky;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
|
||||||
public class PreferencesActivity extends AppCompatActivity {
|
public class PreferencesActivity extends AppCompatActivity
|
||||||
|
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
private boolean themeSwitched;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
themeSwitched = savedInstanceState.getBoolean("themeSwitched");
|
||||||
|
} else {
|
||||||
|
Bundle extras = getIntent().getExtras();
|
||||||
|
if (extras != null) {
|
||||||
|
themeSwitched = extras.getBoolean("themeSwitched");
|
||||||
|
} else {
|
||||||
|
themeSwitched = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
if (preferences.getBoolean("lightTheme", false)) {
|
||||||
|
setTheme(R.style.AppTheme_Light);
|
||||||
|
}
|
||||||
|
preferences.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
getFragmentManager().beginTransaction()
|
getFragmentManager().beginTransaction()
|
||||||
.replace(android.R.id.content, new PreferencesFragment())
|
.replace(android.R.id.content, new PreferencesFragment())
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveInstanceState(Bundle outState) {
|
||||||
|
outState.putBoolean("themeSwitched", themeSwitched);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
saveInstanceState(outState);
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
if (key.equals("lightTheme")) {
|
||||||
|
themeSwitched = true;
|
||||||
|
// recreate() could be used instead, but it doesn't have an animation B).
|
||||||
|
Intent intent = getIntent();
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
Bundle savedInstanceState = new Bundle();
|
||||||
|
saveInstanceState(savedInstanceState);
|
||||||
|
intent.putExtras(savedInstanceState);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
/* Switching themes won't actually change the theme of activities on the back stack.
|
||||||
|
* Either the back stack activities need to all be recreated, or do the easier thing, which
|
||||||
|
* is hijack the back button press and use it to launch a new MainActivity and clear the
|
||||||
|
* back stack. */
|
||||||
|
if (themeSwitched) {
|
||||||
|
Intent intent = new Intent(this, MainActivity.class);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||||
|
startActivity(intent);
|
||||||
|
} else {
|
||||||
|
super.onBackPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@ import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.app.AppCompatDelegate;
|
|
||||||
|
|
||||||
public class SplashActivity extends AppCompatActivity {
|
public class SplashActivity extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class Status {
|
||||||
private Spanned content;
|
private Spanned content;
|
||||||
/** the fully-qualified url of the avatar image */
|
/** the fully-qualified url of the avatar image */
|
||||||
private String avatar;
|
private String avatar;
|
||||||
private String rebloggedByUsername;
|
private String rebloggedByDisplayName;
|
||||||
/** when the status was initially created */
|
/** when the status was initially created */
|
||||||
private Date createdAt;
|
private Date createdAt;
|
||||||
/** whether the authenticated user has reblogged this status */
|
/** whether the authenticated user has reblogged this status */
|
||||||
|
@ -104,8 +104,8 @@ public class Status {
|
||||||
return createdAt;
|
return createdAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRebloggedByUsername() {
|
public String getRebloggedByDisplayName() {
|
||||||
return rebloggedByUsername;
|
return rebloggedByDisplayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getReblogged() {
|
public boolean getReblogged() {
|
||||||
|
@ -136,8 +136,8 @@ public class Status {
|
||||||
return mentions;
|
return mentions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRebloggedByUsername(String name) {
|
public void setRebloggedByDisplayName(String name) {
|
||||||
rebloggedByUsername = name;
|
rebloggedByDisplayName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReblogged(boolean reblogged) {
|
public void setReblogged(boolean reblogged) {
|
||||||
|
@ -257,7 +257,7 @@ public class Status {
|
||||||
Status status;
|
Status status;
|
||||||
if (reblog != null) {
|
if (reblog != null) {
|
||||||
status = reblog;
|
status = reblog;
|
||||||
status.setRebloggedByUsername(username);
|
status.setRebloggedByDisplayName(displayName);
|
||||||
} else {
|
} else {
|
||||||
Spanned contentPlus = HtmlUtils.fromHtml(content);
|
Spanned contentPlus = HtmlUtils.fromHtml(content);
|
||||||
status = new Status(
|
status = new Status(
|
||||||
|
|
|
@ -26,7 +26,6 @@ import android.text.style.URLSpan;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
|
@ -43,7 +42,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
private TextView content;
|
private TextView content;
|
||||||
private NetworkImageView avatar;
|
private NetworkImageView avatar;
|
||||||
private View rebloggedBar;
|
private View rebloggedBar;
|
||||||
private TextView rebloggedByUsername;
|
private TextView rebloggedByDisplayName;
|
||||||
private ImageButton replyButton;
|
private ImageButton replyButton;
|
||||||
private StatusButton reblogButton;
|
private StatusButton reblogButton;
|
||||||
private StatusButton favouriteButton;
|
private StatusButton favouriteButton;
|
||||||
|
@ -70,7 +69,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
avatar.setDefaultImageResId(R.drawable.avatar_default);
|
avatar.setDefaultImageResId(R.drawable.avatar_default);
|
||||||
avatar.setErrorImageResId(R.drawable.avatar_error);
|
avatar.setErrorImageResId(R.drawable.avatar_error);
|
||||||
rebloggedBar = itemView.findViewById(R.id.status_reblogged_bar);
|
rebloggedBar = itemView.findViewById(R.id.status_reblogged_bar);
|
||||||
rebloggedByUsername = (TextView) itemView.findViewById(R.id.status_reblogged);
|
rebloggedByDisplayName = (TextView) itemView.findViewById(R.id.status_reblogged);
|
||||||
replyButton = (ImageButton) itemView.findViewById(R.id.status_reply);
|
replyButton = (ImageButton) itemView.findViewById(R.id.status_reply);
|
||||||
reblogButton = (StatusButton) itemView.findViewById(R.id.status_reblog);
|
reblogButton = (StatusButton) itemView.findViewById(R.id.status_reblog);
|
||||||
favouriteButton = (StatusButton) itemView.findViewById(R.id.status_favourite);
|
favouriteButton = (StatusButton) itemView.findViewById(R.id.status_favourite);
|
||||||
|
@ -174,15 +173,15 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
sinceCreated.setText(readout);
|
sinceCreated.setText(readout);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRebloggedByUsername(String name) {
|
public void setRebloggedByDisplayName(String name) {
|
||||||
Context context = rebloggedByUsername.getContext();
|
Context context = rebloggedByDisplayName.getContext();
|
||||||
String format = context.getString(R.string.status_boosted_format);
|
String format = context.getString(R.string.status_boosted_format);
|
||||||
String boostedText = String.format(format, name);
|
String boostedText = String.format(format, name);
|
||||||
rebloggedByUsername.setText(boostedText);
|
rebloggedByDisplayName.setText(boostedText);
|
||||||
rebloggedBar.setVisibility(View.VISIBLE);
|
rebloggedBar.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hideRebloggedByUsername() {
|
public void hideRebloggedByDisplayName() {
|
||||||
rebloggedBar.setVisibility(View.GONE);
|
rebloggedBar.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,11 +331,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
setAvatar(status.getAvatar());
|
setAvatar(status.getAvatar());
|
||||||
setReblogged(status.getReblogged());
|
setReblogged(status.getReblogged());
|
||||||
setFavourited(status.getFavourited());
|
setFavourited(status.getFavourited());
|
||||||
String rebloggedByUsername = status.getRebloggedByUsername();
|
String rebloggedByDisplayName = status.getRebloggedByDisplayName();
|
||||||
if (rebloggedByUsername == null) {
|
if (rebloggedByDisplayName == null) {
|
||||||
hideRebloggedByUsername();
|
hideRebloggedByDisplayName();
|
||||||
} else {
|
} else {
|
||||||
setRebloggedByUsername(rebloggedByUsername);
|
setRebloggedByDisplayName(rebloggedByDisplayName);
|
||||||
}
|
}
|
||||||
Status.MediaAttachment[] attachments = status.getAttachments();
|
Status.MediaAttachment[] attachments = status.getAttachments();
|
||||||
boolean sensitive = status.getSensitive();
|
boolean sensitive = status.getSensitive();
|
||||||
|
|
|
@ -20,10 +20,9 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
|
||||||
public class ViewTagActivity extends AppCompatActivity {
|
public class ViewTagActivity extends BaseActivity {
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
|
@ -21,13 +21,11 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
public class ViewThreadActivity extends AppCompatActivity {
|
public class ViewThreadActivity extends BaseActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
6
app/src/main/res/anim/fade_in.xml
Normal file
6
app/src/main/res/anim/fade_in.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:anim/linear_interpolator"
|
||||||
|
android:fromAlpha="0"
|
||||||
|
android:toAlpha="1"
|
||||||
|
android:duration="300" />
|
6
app/src/main/res/anim/fade_out.xml
Normal file
6
app/src/main/res/anim/fade_out.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:interpolator="@android:anim/linear_interpolator"
|
||||||
|
android:fromAlpha="1"
|
||||||
|
android:toAlpha="0"
|
||||||
|
android:duration="300" />
|
7
app/src/main/res/color/favourite_button_light.xml
Normal file
7
app/src/main/res/color/favourite_button_light.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:color="#BFAF00" app:state_marked="true" />
|
||||||
|
<item android:color="#4F4F4F" />
|
||||||
|
</selector>
|
5
app/src/main/res/color/media_button_light.xml
Normal file
5
app/src/main/res/color/media_button_light.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="#8F8F8F" android:state_enabled="false" />
|
||||||
|
<item android:color="#000000" />
|
||||||
|
</selector>
|
8
app/src/main/res/color/reblog_button_light.xml
Normal file
8
app/src/main/res/color/reblog_button_light.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:color="#009F6F" app:state_marked="true" />
|
||||||
|
<item android:color="#BFBFBF" android:state_enabled="false" />
|
||||||
|
<item android:color="#4F4F4F" />
|
||||||
|
</selector>
|
|
@ -3,7 +3,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
|
|
||||||
<solid android:color="@color/media_preview_unloaded_background" />
|
<solid android:color="?attr/media_preview_unloaded_background_color" />
|
||||||
|
|
||||||
<stroke
|
<stroke
|
||||||
android:dashWidth="4dp"
|
android:dashWidth="4dp"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<solid android:color="#ffafafaf" />
|
<solid android:color="#ff4f575f" />
|
||||||
<corners android:radius="2dp" />
|
<corners android:radius="2dp" />
|
||||||
</shape>
|
</shape>
|
6
app/src/main/res/drawable/toggle_small_light.xml
Normal file
6
app/src/main/res/drawable/toggle_small_light.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="#ffefefef" />
|
||||||
|
<corners android:radius="2dp" />
|
||||||
|
</shape>
|
|
@ -79,7 +79,7 @@
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/colorPrimary"
|
android:background="?attr/toolbar_background_color"
|
||||||
android:layout_gravity="top"
|
android:layout_gravity="top"
|
||||||
app:layout_collapseMode="pin" />
|
app:layout_collapseMode="pin" />
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/colorPrimary"
|
android:elevation="4dp"
|
||||||
android:elevation="4dp" />
|
android:background="?attr/toolbar_background_color" />
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:id="@+id/activity_main"
|
android:id="@+id/activity_main"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -20,8 +19,8 @@
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/colorPrimary"
|
android:elevation="4dp"
|
||||||
android:elevation="4dp" />
|
android:background="?attr/toolbar_background_color" />
|
||||||
|
|
||||||
<android.support.v4.view.ViewPager
|
<android.support.v4.view.ViewPager
|
||||||
android:id="@+id/pager"
|
android:id="@+id/pager"
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/colorPrimary"
|
android:elevation="4dp"
|
||||||
android:elevation="4dp" />
|
android:background="?attr/toolbar_background_color" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/fragment_container"
|
android:id="@+id/fragment_container"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:id="@+id/activity_view_thread"
|
android:id="@+id/activity_view_thread"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -16,8 +15,8 @@
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:background="@color/colorPrimary"
|
android:elevation="4dp"
|
||||||
android:elevation="4dp" />
|
android:background="?attr/toolbar_background_color" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/fragment_container"
|
android:id="@+id/fragment_container"
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
app:srcCompat="@drawable/ic_reblogged"
|
app:srcCompat="@drawable/ic_reblogged"
|
||||||
android:id="@+id/status_reblogged_icon"
|
android:id="@+id/status_reblogged_icon"
|
||||||
android:paddingRight="@dimen/status_avatar_padding"
|
android:paddingRight="@dimen/status_avatar_padding"
|
||||||
android:paddingLeft="@dimen/status_reblogged_icon_left_padding" />
|
android:paddingLeft="@dimen/status_reblogged_icon_left_padding"
|
||||||
|
android:tint="?attr/notification_icon_tint" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -121,7 +122,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/status_media_preview_top_margin"
|
android:layout_marginTop="@dimen/status_media_preview_top_margin"
|
||||||
android:padding="8dp"
|
android:padding="8dp"
|
||||||
android:background="@color/sensitive_media_warning_background"
|
android:background="?attr/sensitive_media_warning_background_color"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
|
|
||||||
|
@ -182,6 +183,7 @@
|
||||||
android:layout_height="@dimen/status_media_preview_height"
|
android:layout_height="@dimen/status_media_preview_height"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:scaleType="centerCrop" />
|
android:scaleType="centerCrop" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -198,9 +200,9 @@
|
||||||
<ImageButton
|
<ImageButton
|
||||||
app:srcCompat="@drawable/ic_reply"
|
app:srcCompat="@drawable/ic_reply"
|
||||||
android:id="@+id/status_reply"
|
android:id="@+id/status_reply"
|
||||||
style="?attr/image_button_style"
|
|
||||||
android:layout_width="32dp"
|
android:layout_width="32dp"
|
||||||
android:layout_height="32dp" />
|
android:layout_height="32dp"
|
||||||
|
style="?attr/image_button_style" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
@ -210,7 +212,7 @@
|
||||||
<com.keylesspalace.tusky.StatusButton
|
<com.keylesspalace.tusky.StatusButton
|
||||||
app:srcCompat="@drawable/ic_reblog"
|
app:srcCompat="@drawable/ic_reblog"
|
||||||
android:id="@+id/status_reblog"
|
android:id="@+id/status_reblog"
|
||||||
style="?attr/reblog_button_style"
|
style="?attr/status_reblog_button_style"
|
||||||
android:layout_width="32dp"
|
android:layout_width="32dp"
|
||||||
android:layout_height="32dp" />
|
android:layout_height="32dp" />
|
||||||
|
|
||||||
|
@ -222,7 +224,7 @@
|
||||||
<com.keylesspalace.tusky.StatusButton
|
<com.keylesspalace.tusky.StatusButton
|
||||||
android:layout_width="32dp"
|
android:layout_width="32dp"
|
||||||
android:layout_height="32dp"
|
android:layout_height="32dp"
|
||||||
style="?attr/favourite_button_style"
|
style="?attr/status_favourite_button_style"
|
||||||
app:srcCompat="@drawable/ic_favourite"
|
app:srcCompat="@drawable/ic_favourite"
|
||||||
android:id="@+id/status_favourite" />
|
android:id="@+id/status_favourite" />
|
||||||
|
|
||||||
|
|
|
@ -11,16 +11,21 @@
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!--Themed Attributes-->
|
<!--Themed Attributes-->
|
||||||
|
<attr name="toolbar_background_color" format="reference" />
|
||||||
|
<attr name="toolbar_icon_tint" format="reference" />
|
||||||
<attr name="image_button_style" format="reference" />
|
<attr name="image_button_style" format="reference" />
|
||||||
<attr name="favourite_button_style" format="reference" />
|
<attr name="status_favourite_button_style" format="reference" />
|
||||||
<attr name="reblog_button_style" format="reference" />
|
<attr name="status_reblog_button_style" format="reference" />
|
||||||
<attr name="content_warning_button" format="reference" />
|
<attr name="content_warning_button" format="reference" />
|
||||||
<attr name="notification_content" format="reference" />
|
<attr name="sensitive_media_warning_background_color" format="reference|color" />
|
||||||
<attr name="notification_icon_tint" format="reference|color" />
|
<attr name="media_preview_unloaded_background_color" format="reference|color" />
|
||||||
<attr name="status_text_color_secondary" format="reference|color" />
|
<attr name="status_text_color_secondary" format="reference|color" />
|
||||||
<attr name="status_divider_color" format="reference|color" />
|
<attr name="status_divider_color" format="reference|color" />
|
||||||
<attr name="tab_page_margin_color" format="reference|color" />
|
<attr name="tab_page_margin_color" format="reference|color" />
|
||||||
|
<attr name="notification_content" format="reference" />
|
||||||
|
<attr name="notification_icon_tint" format="reference|color" />
|
||||||
<attr name="account_header_background_color" format="reference|color" />
|
<attr name="account_header_background_color" format="reference|color" />
|
||||||
<attr name="compose_media_button_tint" format="reference|color" />
|
<attr name="compose_media_button_tint" format="reference|color" />
|
||||||
|
<attr name="compose_mention_color" format="reference|color" />
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -1,21 +1,58 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="colorPrimary">#44A673</color>
|
<!--These colors are not affected by themes.-->
|
||||||
<color name="colorPrimaryDark">#2C996E</color>
|
|
||||||
<color name="colorAccent">#3F8A65</color>
|
|
||||||
<color name="colorBackground">#3C4945</color>
|
|
||||||
<color name="windowBackground">#191E1E</color>
|
|
||||||
<color name="splash_background">#4F4F4F</color>
|
<color name="splash_background">#4F4F4F</color>
|
||||||
<color name="button_dark">#3F8A65</color>
|
|
||||||
<color name="image_button_dark">#CFCFCF</color>
|
|
||||||
<color name="view_video_background">#000000</color>
|
<color name="view_video_background">#000000</color>
|
||||||
<color name="sensitive_media_warning_background">#303030</color>
|
<!--Dark Theme Colors-->
|
||||||
<color name="media_preview_unloaded_background">#2F2F2F</color>
|
<color name="color_primary_dark">#44A673</color>
|
||||||
<color name="compose_mention">#AFBFCF</color>
|
<color name="color_primary_dark_dark">#2C996E</color> <!--Dark Dark-->
|
||||||
<color name="notification_content_faded">#9F9F9F</color>
|
<color name="color_accent_dark">#3F8A65</color>
|
||||||
<color name="notification_icon_tint">#CFCFCF</color>
|
<color name="button_dark">#3F8A65</color>
|
||||||
|
<color name="color_background_dark">#3C4945</color>
|
||||||
|
<color name="window_background_dark">#191E1E</color>
|
||||||
|
<color name="edit_text_color_dark">#FFFFFF</color>
|
||||||
|
<color name="text_color_primary_dark">#FFFFFF</color>
|
||||||
|
<color name="text_color_secondary_dark">#FFFFFF</color>
|
||||||
|
<color name="text_color_tertiary_dark">#FFFFFF</color>
|
||||||
|
<color name="text_color_primary_inverse_dark">#000000</color>
|
||||||
|
<color name="text_color_secondary_inverse_dark">#000000</color>
|
||||||
|
<color name="text_color_tertiary_inverse_dark">#000000</color>
|
||||||
|
<color name="toolbar_background_dark">#44A673</color>
|
||||||
|
<color name="toolbar_icon_dark">#FFFFFF</color>
|
||||||
|
<color name="image_button_dark">#CFCFCF</color>
|
||||||
|
<color name="sensitive_media_warning_background_dark">#303030</color>
|
||||||
|
<color name="media_preview_unloaded_background_dark">#2F2F2F</color>
|
||||||
<color name="status_text_secondary_dark">#A4B4BC</color>
|
<color name="status_text_secondary_dark">#A4B4BC</color>
|
||||||
<color name="status_divider_dark">#000000</color>
|
<color name="status_divider_dark">#000000</color>
|
||||||
<color name="tab_page_margin_dark">#4C534B</color>
|
<color name="tab_page_margin_dark">#4C534B</color>
|
||||||
<color name="account_header_background_dark">#000000</color>
|
<color name="account_header_background_dark">#000000</color>
|
||||||
|
<color name="compose_mention_dark">#AFBFCF</color>
|
||||||
|
<color name="notification_content_faded_dark">#9F9F9F</color>
|
||||||
|
<color name="notification_icon_tint_dark">#CFCFCF</color>
|
||||||
|
<!--Light Theme Colors-->
|
||||||
|
<color name="color_primary_light">#44A673</color>
|
||||||
|
<color name="color_primary_dark_light">#2C996E</color>
|
||||||
|
<color name="color_accent_light">#3F8A65</color>
|
||||||
|
<color name="button_light">#79daa8</color>
|
||||||
|
<color name="color_background_light">#FFFFFF</color>
|
||||||
|
<color name="window_background_light">#FFFFFF</color>
|
||||||
|
<color name="edit_text_color_light">#000000</color>
|
||||||
|
<color name="text_color_primary_light">#000000</color>
|
||||||
|
<color name="text_color_secondary_light">#000000</color>
|
||||||
|
<color name="text_color_tertiary_light">#000000</color>
|
||||||
|
<color name="text_color_primary_inverse_light">#FFFFFF</color>
|
||||||
|
<color name="text_color_secondary_inverse_light">#FFFFFF</color>
|
||||||
|
<color name="text_color_tertiary_inverse_light">#FFFFFF</color>
|
||||||
|
<color name="toolbar_background_light">#f6f7f7</color>
|
||||||
|
<color name="toolbar_icon_light">#000000</color>
|
||||||
|
<color name="image_button_light">#2F2F2F</color>
|
||||||
|
<color name="sensitive_media_warning_background_light">#B0B0B0</color>
|
||||||
|
<color name="media_preview_unloaded_background_light">#CFCFCF</color>
|
||||||
|
<color name="status_text_secondary_light">#34444C</color>
|
||||||
|
<color name="status_divider_light">#CFCFCF</color>
|
||||||
|
<color name="tab_page_margin_light">#9F9F9F</color>
|
||||||
|
<color name="account_header_background_light">#EFEFEF</color>
|
||||||
|
<color name="compose_mention_light">#2F5F6F</color>
|
||||||
|
<color name="notification_content_faded_light">#7F7F7F</color>
|
||||||
|
<color name="notification_icon_tint_light">#1F1F1F</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
<string name="endpoint_devices_register">/api/v1/devices/register</string>
|
<string name="endpoint_devices_register">/api/v1/devices/register</string>
|
||||||
<string name="endpoint_devices_unregister">/api/v1/devices/unregister</string>
|
<string name="endpoint_devices_unregister">/api/v1/devices/unregister</string>
|
||||||
|
|
||||||
|
<string name="error_authorization_unknown">An unidentified authorization error occurred.</string>
|
||||||
<string name="error_fetching_notifications">Notifications could not be fetched.</string>
|
<string name="error_fetching_notifications">Notifications could not be fetched.</string>
|
||||||
<string name="error_compose_character_limit">The status is too long!</string>
|
<string name="error_compose_character_limit">The status is too long!</string>
|
||||||
<string name="error_sending_status">The status failed to be sent.</string>
|
<string name="error_sending_status">The status failed to be sent.</string>
|
||||||
|
@ -135,5 +136,7 @@
|
||||||
<string name="pref_title_notification_alert_sound">Notify with a sound</string>
|
<string name="pref_title_notification_alert_sound">Notify with a sound</string>
|
||||||
<string name="pref_title_notification_style_vibrate">Notify with vibration</string>
|
<string name="pref_title_notification_style_vibrate">Notify with vibration</string>
|
||||||
<string name="pref_title_notification_style_light">Notify with light</string>
|
<string name="pref_title_notification_style_light">Notify with light</string>
|
||||||
|
<string name="pref_title_appearance_settings">Appearance</string>
|
||||||
|
<string name="pref_title_light_theme">Use The Light Theme</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,56 +1,117 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Base application theme (Dark). -->
|
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
|
<item name="android:windowBackground">@drawable/splash_background</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--Base Application Theme Styles (Dark)-->
|
||||||
|
|
||||||
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
|
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
<item name="colorPrimary">@color/color_primary_dark</item>
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/color_primary_dark_dark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/color_accent_dark</item>
|
||||||
<item name="colorButtonNormal">@color/button_dark</item>
|
<item name="colorButtonNormal">@color/button_dark</item>
|
||||||
|
|
||||||
<item name="android:colorBackground">@color/colorBackground</item>
|
<item name="android:colorBackground">@color/color_background_dark</item>
|
||||||
<item name="android:windowBackground">@color/windowBackground</item>
|
<item name="android:windowBackground">@color/window_background_dark</item>
|
||||||
<item name="android:editTextColor">#FFFFFF</item>
|
<item name="android:editTextColor">@color/edit_text_color_dark</item>
|
||||||
<item name="android:textColorPrimary">#FFFFFF</item>
|
<item name="android:textColorPrimary">@color/text_color_primary_dark</item>
|
||||||
<item name="android:textColorSecondary">#FFFFFF</item>
|
<item name="android:textColorSecondary">@color/text_color_secondary_dark</item>
|
||||||
<item name="android:textColorTertiary">#FFFFFF</item>
|
<item name="android:textColorTertiary">@color/text_color_tertiary_dark</item>
|
||||||
<item name="android:textColorPrimaryInverse">#000000</item>
|
<item name="android:textColorPrimaryInverse">@color/text_color_primary_inverse_dark</item>
|
||||||
<item name="android:textColorSecondaryInverse">#000000</item>
|
<item name="android:textColorSecondaryInverse">@color/text_color_secondary_inverse_dark</item>
|
||||||
<item name="android:textColorTertiaryInverse">#000000</item>
|
<item name="android:textColorTertiaryInverse">@color/text_color_tertiary_inverse_dark</item>
|
||||||
|
|
||||||
<item name="bottomSheetDialogTheme">@style/AppTheme.BottomSheetDialog.Dark</item>
|
<item name="bottomSheetDialogTheme">@style/AppTheme.BottomSheetDialog.Dark</item>
|
||||||
|
|
||||||
<item name="notification_content">@color/notification_content_faded</item>
|
<item name="toolbar_background_color">@color/toolbar_background_dark</item>
|
||||||
<item name="notification_icon_tint">@color/notification_icon_tint</item>
|
<item name="toolbar_icon_tint">@color/toolbar_icon_dark</item>
|
||||||
<item name="image_button_style">@style/AppTheme.ImageButton.Dark</item>
|
<item name="image_button_style">@style/AppTheme.ImageButton.Dark</item>
|
||||||
<item name="favourite_button_style">@style/AppTheme.FavouriteButton.Dark</item>
|
<item name="status_reblog_button_style">@style/AppTheme.ReblogButton.Dark</item>
|
||||||
<item name="reblog_button_style">@style/AppTheme.ReblogButton.Dark</item>
|
<item name="status_favourite_button_style">@style/AppTheme.FavouriteButton.Dark</item>
|
||||||
<item name="content_warning_button">@drawable/toggle_small</item>
|
<item name="content_warning_button">@drawable/toggle_small</item>
|
||||||
|
<item name="sensitive_media_warning_background_color">@color/sensitive_media_warning_background_dark</item>
|
||||||
|
<item name="media_preview_unloaded_background_color">@color/media_preview_unloaded_background_dark</item>
|
||||||
<item name="status_text_color_secondary">@color/status_text_secondary_dark</item>
|
<item name="status_text_color_secondary">@color/status_text_secondary_dark</item>
|
||||||
<item name="status_divider_color">@color/status_divider_dark</item>
|
<item name="status_divider_color">@color/status_divider_dark</item>
|
||||||
<item name="tab_page_margin_color">@color/tab_page_margin_dark</item>
|
<item name="tab_page_margin_color">@color/tab_page_margin_dark</item>
|
||||||
<item name="account_header_background_color">@color/account_header_background_dark</item>
|
<item name="account_header_background_color">@color/account_header_background_dark</item>
|
||||||
<item name="compose_media_button_tint">@color/media_button_dark</item>
|
<item name="compose_media_button_tint">@color/media_button_dark</item>
|
||||||
|
<item name="compose_mention_color">@color/compose_mention_dark</item>
|
||||||
|
<item name="notification_content">@color/notification_content_faded_dark</item>
|
||||||
|
<item name="notification_icon_tint">@color/notification_icon_tint_dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.ImageButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
<style name="AppTheme.ImageButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
||||||
<item name="android:tint">@color/image_button_dark</item>
|
<item name="android:tint">@color/image_button_dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.FavouriteButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
|
||||||
<item name="android:tint">@color/favourite_button_dark</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="AppTheme.ReblogButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
<style name="AppTheme.ReblogButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
||||||
<item name="android:tint">@color/reblog_button_dark</item>
|
<item name="android:tint">@color/reblog_button_dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.BottomSheetDialog.Dark" parent="@style/Theme.Design.BottomSheetDialog">
|
<style name="AppTheme.FavouriteButton.Dark" parent="@style/Widget.AppCompat.Button.Borderless.Colored">
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="android:tint">@color/favourite_button_dark</item>
|
||||||
<item name="android:colorBackground">@color/colorBackground</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
|
<style name="AppTheme.BottomSheetDialog.Dark" parent="@style/Theme.Design.BottomSheetDialog">
|
||||||
<item name="android:windowBackground">@drawable/splash_background</item>
|
<item name="colorAccent">@color/color_accent_dark</item>
|
||||||
|
<item name="android:colorBackground">@color/color_background_dark</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--Light Application Theme Styles-->
|
||||||
|
|
||||||
|
<style name="AppTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
|
||||||
|
<item name="colorPrimary">@color/color_primary_light</item>
|
||||||
|
<item name="colorPrimaryDark">@color/color_primary_dark_light</item>
|
||||||
|
<item name="colorAccent">@color/color_accent_light</item>
|
||||||
|
<item name="colorButtonNormal">@color/button_light</item>
|
||||||
|
|
||||||
|
<item name="android:colorBackground">@color/color_background_light</item>
|
||||||
|
<item name="android:windowBackground">@color/window_background_light</item>
|
||||||
|
<item name="android:editTextColor">@color/edit_text_color_light</item>
|
||||||
|
<item name="android:textColorPrimary">@color/text_color_primary_light</item>
|
||||||
|
<item name="android:textColorSecondary">@color/text_color_secondary_light</item>
|
||||||
|
<item name="android:textColorTertiary">@color/text_color_tertiary_light</item>
|
||||||
|
<item name="android:textColorPrimaryInverse">@color/text_color_primary_inverse_light</item>
|
||||||
|
<item name="android:textColorSecondaryInverse">@color/text_color_secondary_inverse_light</item>
|
||||||
|
<item name="android:textColorTertiaryInverse">@color/text_color_tertiary_inverse_light</item>
|
||||||
|
|
||||||
|
<item name="bottomSheetDialogTheme">@style/AppTheme.BottomSheetDialog.Light</item>
|
||||||
|
|
||||||
|
<item name="toolbar_background_color">@color/toolbar_background_light</item>
|
||||||
|
<item name="toolbar_icon_tint">@color/toolbar_icon_light</item>
|
||||||
|
<item name="image_button_style">@style/AppTheme.ImageButton.Light</item>
|
||||||
|
<item name="status_reblog_button_style">@style/AppTheme.ReblogButton.Light</item>
|
||||||
|
<item name="status_favourite_button_style">@style/AppTheme.FavouriteButton.Light</item>
|
||||||
|
<item name="content_warning_button">@drawable/toggle_small_light</item>
|
||||||
|
<item name="sensitive_media_warning_background_color">@color/sensitive_media_warning_background_light</item>
|
||||||
|
<item name="media_preview_unloaded_background_color">@color/media_preview_unloaded_background_light</item>
|
||||||
|
<item name="status_text_color_secondary">@color/status_text_secondary_light</item>
|
||||||
|
<item name="status_divider_color">@color/status_divider_light</item>
|
||||||
|
<item name="tab_page_margin_color">@color/tab_page_margin_light</item>
|
||||||
|
<item name="account_header_background_color">@color/account_header_background_light</item>
|
||||||
|
<item name="compose_media_button_tint">@color/media_button_light</item>
|
||||||
|
<item name="compose_mention_color">@color/compose_mention_light</item>
|
||||||
|
<item name="notification_content">@color/notification_content_faded_light</item>
|
||||||
|
<item name="notification_icon_tint">@color/notification_icon_tint_light</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.ImageButton.Light" parent="Widget.AppCompat.Button.Borderless.Colored">
|
||||||
|
<item name="android:tint">@color/image_button_light</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.ReblogButton.Light" parent="Widget.AppCompat.Button.Borderless.Colored">
|
||||||
|
<item name="android:tint">@color/reblog_button_light</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.FavouriteButton.Light" parent="Widget.AppCompat.Button.Borderless.Colored">
|
||||||
|
<item name="android:tint">@color/favourite_button_light</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.BottomSheetDialog.Light" parent="@style/Theme.Design.Light.BottomSheetDialog">
|
||||||
|
<item name="colorAccent">@color/color_accent_light</item>
|
||||||
|
<item name="android:colorBackground">@color/color_background_light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:key="@string/preferences_file_key">
|
android:key="@string/preferences_file_key">
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory android:title="@string/pref_title_notification_settings">
|
||||||
android:title="@string/pref_title_notification_settings">
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="pullNotifications"
|
android:key="pullNotifications"
|
||||||
|
@ -40,4 +39,13 @@
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory android:title="@string/pref_title_appearance_settings">
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="lightTheme"
|
||||||
|
android:title="@string/pref_title_light_theme"
|
||||||
|
android:defaultValue="false" />
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
Loading…
Reference in a new issue