Theme Support
1) Broke out the UI elements of the major Activites into stylable attributes. 2) Created a 'light' and 'dark' theme for the newly stylable attrs. 3) Touched up some of the UI spacing. 4) Implemented dynamic theme switching support.
@ -10,19 +10,19 @@
|
||||
android:label="Access to TextSecure Secrets"
|
||||
android:protectionLevel="signature" />
|
||||
|
||||
<uses-permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.READ_PROFILE"></uses-permission>
|
||||
<uses-permission android:name="android.permission.WRITE_PROFILE"></uses-permission>
|
||||
<uses-permission android:name="android.permission.BROADCAST_WAP_PUSH"></uses-permission>
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
|
||||
<uses-permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"/>
|
||||
<uses-permission android:name="android.permission.READ_PROFILE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_PROFILE"/>
|
||||
<uses-permission android:name="android.permission.BROADCAST_WAP_PUSH"/>
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.RECEIVE_MMS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
|
||||
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
|
||||
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
|
||||
<uses-permission android:name="android.permission.READ_SMS"/>
|
||||
<uses-permission android:name="android.permission.SEND_SMS"/>
|
||||
<uses-permission android:name="android.permission.WRITE_SMS"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
@ -40,7 +40,7 @@
|
||||
|
||||
<application android:icon="@drawable/icon"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Sherlock.Light.DarkActionBar">
|
||||
android:theme="@style/TextSecure.LightTheme">
|
||||
|
||||
<activity android:name=".RoutingActivity"
|
||||
android:theme="@style/NoAnimation.Theme.Sherlock.Light.DarkActionBar"
|
||||
|
BIN
res/drawable-hdpi/divet_left_dark.png
Normal file
After Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
res/drawable-hdpi/divet_right_dark.png
Normal file
After Width: | Height: | Size: 319 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
res/drawable-hdpi/ic_send_holo_dark.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
res/drawable-hdpi/ic_send_holo_dark_encrypted.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
res/drawable-hdpi/ic_sms_mms_delivered_dark.png
Normal file
After Width: | Height: | Size: 827 B |
Before Width: | Height: | Size: 927 B After Width: | Height: | Size: 927 B |
BIN
res/drawable-hdpi/list_selected_holo_dark.9.png
Normal file
After Width: | Height: | Size: 156 B |
BIN
res/drawable-mdpi/divet_left_dark.png
Normal file
After Width: | Height: | Size: 245 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
res/drawable-mdpi/divet_right_dark.png
Normal file
After Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
res/drawable-mdpi/ic_send_holo_dark.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
res/drawable-mdpi/ic_send_holo_dark_encrypted.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
res/drawable-mdpi/ic_sms_mms_delivered_dark.png
Normal file
After Width: | Height: | Size: 609 B |
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 692 B |
BIN
res/drawable-mdpi/list_selected_holo_dark.9.png
Normal file
After Width: | Height: | Size: 151 B |
BIN
res/drawable-xhdpi/divet_left_dark.png
Normal file
After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
res/drawable-xhdpi/divet_right_dark.png
Normal file
After Width: | Height: | Size: 375 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
res/drawable-xhdpi/ic_send_holo_dark.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
res/drawable-xhdpi/ic_send_holo_dark_encrypted.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
res/drawable-xhdpi/ic_sms_mms_delivered_dark.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
res/drawable-xhdpi/list_selected_holo_dark.9.png
Normal file
After Width: | Height: | Size: 160 B |
@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2007 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/read_bgcolor" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
11
res/drawable/conversation_list_item_background_read_dark.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/conversation_list_item_background_read_dark" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/conversation_list_item_background_read_light" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2007 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/unread_bgcolor" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/conversation_list_item_background_unread_dark" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_selected="true"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_pressed="true" android:state_selected="false"
|
||||
android:drawable="@android:color/transparent" />
|
||||
<item android:state_selected="false" android:state_activated="false"
|
||||
android:drawable="@color/conversation_list_item_background_unread_light" />
|
||||
<item android:state_activated="true"
|
||||
android:drawable="@drawable/list_selector_background_selected" />
|
||||
</selector>
|
@ -18,7 +18,7 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/white_background"
|
||||
android:background="?conversation_background"
|
||||
android:gravity="bottom">
|
||||
|
||||
<fragment
|
||||
@ -38,7 +38,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="5dip"
|
||||
android:background="#fff">
|
||||
android:background="?conversation_background">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/attachment_editor"
|
||||
@ -51,7 +51,8 @@
|
||||
android:id="@+id/attachment_thumbnail"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="150dip"
|
||||
android:layout_weight="1" />
|
||||
android:layout_weight="1"
|
||||
android:contentDescription="Attachment Thumbnail"/>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
@ -70,9 +71,9 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View android:background="#eeeeee"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp" />
|
||||
<View android:background="?conversation_editor_background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/bottom_panel"
|
||||
@ -97,7 +98,7 @@
|
||||
android:maxLength="1000"
|
||||
android:maxLines="4"
|
||||
android:nextFocusRight="@+id/send_button"
|
||||
android:textColor="@android:color/black" />
|
||||
android:textColor="?conversation_editor_text_color" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/send_button"
|
||||
@ -108,19 +109,17 @@
|
||||
android:contentDescription="@string/conversation_activity__send"
|
||||
android:nextFocusLeft="@+id/embedded_text_editor"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_send_holo_light"
|
||||
android:src="?conversation_send_button"
|
||||
android:clickable="false"
|
||||
android:enabled="false" />
|
||||
<!-- android:tint="#66ffffff" />-->
|
||||
|
||||
"
|
||||
|
||||
</LinearLayout>
|
||||
<TextView android:id="@+id/space_left"
|
||||
android:paddingLeft="5dip"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="160/160 (1)"
|
||||
/>
|
||||
<TextView android:id="@+id/space_left"
|
||||
android:paddingLeft="5dip"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="160/160 (1)" />
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
</RelativeLayout>
|
||||
|
@ -9,8 +9,9 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="horizontal"
|
||||
android:background="?conversation_card_background">
|
||||
|
||||
<view xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
class="org.thoughtcrime.securesms.components.ImageDivet"
|
||||
@ -20,14 +21,15 @@
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:cropToPadding="true"
|
||||
android:layout_marginRight="10dip"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout android:id="@+id/conversation_item_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toLeftOf="@+id/indicators_parent"
|
||||
android:layout_toRightOf="@id/contact_photo"
|
||||
android:background="?conversation_background"
|
||||
android:paddingLeft="10dip"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView android:id="@+id/conversation_item_body"
|
||||
@ -35,14 +37,16 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:linksClickable="true"
|
||||
android:paddingTop="5dip"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="#ff000000"
|
||||
android:textColor="?conversation_text_primary_color"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/mms_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:visibility="gone"
|
||||
android:paddingTop="7dip"
|
||||
android:paddingBottom="7dip">
|
||||
|
||||
@ -54,7 +58,8 @@
|
||||
android:scaleType="centerInside"
|
||||
android:adjustViewBounds="true"
|
||||
android:background="@android:drawable/picture_frame"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Message Media"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/play_slideshow_button"
|
||||
@ -62,7 +67,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/mms_play_btn"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Play Button"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@ -91,16 +97,18 @@
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="5dip"
|
||||
android:gravity="left">
|
||||
|
||||
<ImageView android:id="@+id/delivered_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="3dip"
|
||||
android:src="@drawable/ic_sms_mms_delivered"
|
||||
android:visibility="gone" />
|
||||
android:src="?conversation_delivered_indicator"
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Delivered Indicator"/>
|
||||
|
||||
<TextView android:id="@+id/group_message_status"
|
||||
android:layout_width="wrap_content"
|
||||
@ -108,7 +116,7 @@
|
||||
android:linksClickable="false"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_gravity="left"
|
||||
android:textColor="#ffcccccc"
|
||||
android:textColor="?conversation_text_secondary_color"
|
||||
android:visibility="gone"
|
||||
android:layout_marginRight="8dip"
|
||||
android:paddingTop="1dip"/>
|
||||
@ -120,7 +128,7 @@
|
||||
android:linksClickable="false"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_gravity="left"
|
||||
android:textColor="#ffcccccc"
|
||||
android:textColor="?conversation_text_secondary_color"
|
||||
android:paddingTop="1dip"/>
|
||||
</LinearLayout>
|
||||
|
||||
@ -128,34 +136,35 @@
|
||||
|
||||
<LinearLayout android:id="@+id/indicators_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_alignParentRight="true">
|
||||
android:layout_alignParentRight="true"
|
||||
android:gravity="center_vertical"
|
||||
android:background="?conversation_background">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/key_exchange_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_menu_login"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Key Exchange Indicator"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sms_secure_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_menu_lock_holo_light"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Secure Message Indicator"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sms_failed_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_list_alert_sms_failed"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Send Failed Indicator"/>
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
@ -7,48 +7,51 @@
|
||||
android:paddingLeft="10dip"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<RelativeLayout android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="horizontal"
|
||||
android:background="?conversation_card_background">
|
||||
|
||||
<LinearLayout android:id="@+id/indicators_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentLeft="true">
|
||||
android:layout_alignParentLeft="true"
|
||||
android:gravity="center_vertical"
|
||||
android:background="?conversation_background">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/key_exchange_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_menu_login"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Key Exchange Indicator"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sms_secure_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_menu_lock_holo_light"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Secure Message Indicator"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/sms_failed_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="@drawable/ic_list_alert_sms_failed"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Send Failed Indicator"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:id="@+id/conversation_item_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toRightOf="@id/indicators_parent"
|
||||
android:layout_toLeftOf="@+id/contact_photo"
|
||||
android:background="?conversation_background"
|
||||
android:paddingRight="10dip"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView android:id="@+id/conversation_item_body"
|
||||
@ -58,13 +61,14 @@
|
||||
android:linksClickable="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:gravity="right"
|
||||
android:textColor="#ff000000"
|
||||
android:textColor="?conversation_text_primary_color"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/mms_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:visibility="gone"
|
||||
android:paddingTop="7dip"
|
||||
android:paddingBottom="7dip">
|
||||
|
||||
@ -76,7 +80,8 @@
|
||||
android:scaleType="centerInside"
|
||||
android:adjustViewBounds="true"
|
||||
android:background="@android:drawable/picture_frame"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Media Message"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/play_slideshow_button"
|
||||
@ -84,7 +89,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/mms_play_btn"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Play Button"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@ -113,16 +119,18 @@
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="5dip"
|
||||
android:gravity="right">
|
||||
|
||||
<ImageView android:id="@+id/delivered_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="3dip"
|
||||
android:src="@drawable/ic_sms_mms_delivered"
|
||||
android:visibility="gone" />
|
||||
android:src="?conversation_delivered_indicator"
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Delivered Indicator"/>
|
||||
|
||||
<TextView android:id="@+id/group_message_status"
|
||||
android:layout_width="wrap_content"
|
||||
@ -130,7 +138,7 @@
|
||||
android:linksClickable="false"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_gravity="right"
|
||||
android:textColor="#ffcccccc"
|
||||
android:textColor="?conversation_text_secondary_color"
|
||||
android:visibility="gone"
|
||||
android:layout_marginRight="8dip"
|
||||
android:paddingTop="1dip"/>
|
||||
@ -142,7 +150,7 @@
|
||||
android:linksClickable="false"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:layout_gravity="right"
|
||||
android:textColor="#ffcccccc"
|
||||
android:textColor="?conversation_text_secondary_color"
|
||||
android:paddingTop="1dip"/>
|
||||
|
||||
</LinearLayout>
|
||||
@ -158,7 +166,6 @@
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:cropToPadding="true"
|
||||
android:layout_marginLeft="10dip"
|
||||
android:layout_marginRight="0dip"
|
||||
android:padding="0dip"
|
||||
android:scaleType="centerCrop" />
|
||||
|
@ -1,9 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.thoughtcrime.securesms.ConversationListItem xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="10dip"
|
||||
>
|
||||
<org.thoughtcrime.securesms.ConversationListItem
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<FrameLayout android:id="@+id/contact_photo_frame"
|
||||
android:layout_width="wrap_content"
|
||||
@ -11,6 +10,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:visibility="visible">
|
||||
|
||||
<QuickContactBadge android:id="@+id/contact_photo_badge"
|
||||
style="?android:attr/quickContactBadgeStyleWindowLarge"
|
||||
android:visibility="gone" />
|
||||
@ -20,7 +20,8 @@
|
||||
android:layout_height="60dp"
|
||||
android:cropToPadding="true"
|
||||
android:scaleType="centerCrop"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
android:contentDescription="Contact Photo Image"/>
|
||||
</FrameLayout>
|
||||
|
||||
<!--<CheckBox android:id="@+id/checkbox"-->
|
||||
@ -37,18 +38,19 @@
|
||||
android:singleLine="true"
|
||||
android:layout_marginTop="6dip"
|
||||
android:layout_marginRight="5dip"
|
||||
android:layout_marginLeft="5dip"
|
||||
android:layout_marginLeft="10dip"
|
||||
android:layout_marginBottom="10dip"
|
||||
android:layout_alignTop="@id/contact_photo_frame"
|
||||
android:layout_toRightOf="@id/contact_photo_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:ellipsize="marquee"
|
||||
android:textColor="#000000"/>
|
||||
android:ellipsize="marquee"/>
|
||||
<!--android:layout_toLeftOf="@id/checkbox"-->
|
||||
|
||||
|
||||
<TextView android:id="@+id/date"
|
||||
android:layout_marginBottom="10dip"
|
||||
android:layout_marginLeft="5dip"
|
||||
android:paddingRight="10dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
@ -64,7 +66,8 @@
|
||||
android:layout_alignBottom="@id/date"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:src="@drawable/ic_list_alert_sms_failed" />
|
||||
android:src="@drawable/ic_list_alert_sms_failed"
|
||||
android:contentDescription="Error Alert"/>
|
||||
|
||||
<ImageView android:id="@+id/attachment"
|
||||
android:layout_marginLeft="3dip"
|
||||
@ -73,7 +76,8 @@
|
||||
android:visibility="gone"
|
||||
android:layout_toLeftOf="@id/error"
|
||||
android:layout_alignBottom="@id/date"
|
||||
android:src="@drawable/ic_attachment_universal_small" />
|
||||
android:src="@drawable/ic_attachment_universal_small"
|
||||
android:contentDescription="Attachment Indicator"/>
|
||||
|
||||
<TextView android:id="@+id/subject"
|
||||
android:layout_width="wrap_content"
|
||||
@ -81,7 +85,7 @@
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:singleLine="true"
|
||||
android:layout_marginBottom="10dip"
|
||||
android:layout_marginLeft="5dip"
|
||||
android:layout_marginLeft="10dip"
|
||||
android:layout_alignBottom="@id/contact_photo_frame"
|
||||
android:layout_toRightOf="@id/contact_photo_frame"
|
||||
android:layout_toLeftOf="@id/date"
|
||||
|
@ -18,7 +18,7 @@
|
||||
<TextView android:id="@+id/text1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:textColor="@drawable/text_color_black"
|
||||
android:textColor="@color/black"
|
||||
android:gravity="center_vertical"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:layout_gravity="center_horizontal|center_vertical" />
|
||||
|
@ -8,7 +8,7 @@
|
||||
android:paddingBottom="5dip"
|
||||
android:paddingLeft="5dip"
|
||||
android:paddingRight="5dip"
|
||||
android:background="@drawable/white_background"
|
||||
android:background="?conversation_background"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<org.thoughtcrime.securesms.contacts.RecipientsEditor android:id="@+id/recipients_text"
|
||||
|
5
res/values-v11/colors.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="edit_text_light_theme">#ff000000</color>
|
||||
<color name="edit_text_dark_theme">#ffeeeeee</color>
|
||||
</resources>
|
5
res/values-v8/colors.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="edit_text_light_theme">#ff000000</color>
|
||||
<color name="edit_text_dark_theme">#ff000000</color>
|
||||
</resources>
|
@ -6,6 +6,16 @@
|
||||
<item>@string/preferences__hours</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_theme_entries">
|
||||
<item>@string/preferences__light_theme</item>
|
||||
<item>@string/preferences__dark_theme</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_theme_values" translatable="false">
|
||||
<item>light</item>
|
||||
<item>dark</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_led_color_entries">
|
||||
<item>@string/preferences__green</item>
|
||||
<item>@string/preferences__red</item>
|
||||
|
19
res/values/attrs.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<attr name="conversation_list_item_background_selected" format="reference"/>
|
||||
<attr name="conversation_list_item_background_read" format="reference"/>
|
||||
<attr name="conversation_list_item_background_unread" format="reference"/>
|
||||
<attr name="conversation_list_item_count_color" format="reference|color"/>
|
||||
|
||||
<attr name="conversation_background" format="reference|color"/>
|
||||
<attr name="conversation_card_background" format="reference|color"/>
|
||||
<attr name="conversation_text_primary_color" format="reference|color"/>
|
||||
<attr name="conversation_text_secondary_color" format="reference|color"/>
|
||||
<attr name="conversation_avatar_divet_right" format="reference"/>
|
||||
<attr name="conversation_avatar_divet_left" format="reference"/>
|
||||
<attr name="conversation_editor_background" format="reference|color"/>
|
||||
<attr name="conversation_editor_text_color" format="reference|color"/>
|
||||
<attr name="conversation_send_button" format="reference"/>
|
||||
<attr name="conversation_send_secure_button" format="reference"/>
|
||||
<attr name="conversation_delivered_indicator" format="reference"/>
|
||||
</resources>
|
@ -1,8 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<drawable name="white_background">#ffffffff</drawable>
|
||||
<drawable name="text_color_black">#ff000000</drawable>
|
||||
|
||||
<color name="unread_bgcolor">#ffffffff</color>
|
||||
<color name="read_bgcolor">#ffeeeeee</color>
|
||||
|
||||
<color name="white">#ffffffff</color>
|
||||
<color name="black">#ff000000</color>
|
||||
|
||||
<color name="conversation_list_item_background_read_light">#ffeeeeee</color>
|
||||
<color name="conversation_list_item_background_unread_light">#ffffffff</color>
|
||||
<color name="conversation_list_item_background_read_dark">#ff000000</color>
|
||||
<color name="conversation_list_item_background_unread_dark">#ff333333</color>
|
||||
|
||||
</resources>
|
@ -457,7 +457,8 @@
|
||||
<string name="preferences__conversation_length_limit">Conversation length limit</string>
|
||||
<string name="preferences__trim_all_threads_now">Trim all threads now</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Scan through all conversation threads and enforce conversation length limits</string>
|
||||
|
||||
<string name="preferences__light_theme">Light Theme</string>
|
||||
<string name="preferences__dark_theme">Dark Theme</string>
|
||||
|
||||
<!-- **************************************** -->
|
||||
<!-- menus -->
|
||||
@ -527,6 +528,8 @@
|
||||
|
||||
<!-- verify_keys -->
|
||||
<string name="verify_keys__menu_verified">Verified</string>
|
||||
<string name="preferences__appearance">Appearance</string>
|
||||
<string name="preferences__theme">Theme</string>
|
||||
<!-- EOF -->
|
||||
|
||||
</resources>
|
||||
|
41
res/values/themes.xml
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="TextSecure.LightTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar">
|
||||
<item name="conversation_list_item_background_read">@drawable/conversation_list_item_background_read_light</item>
|
||||
<item name="conversation_list_item_background_unread">@drawable/conversation_list_item_background_unread_light</item>
|
||||
<item name="conversation_list_item_background_selected">@drawable/list_selected_holo_light</item>
|
||||
<item name="conversation_list_item_count_color">#66333333</item>
|
||||
|
||||
<item name="conversation_card_background">#ffdddddd</item>
|
||||
<item name="conversation_background">@color/white</item>
|
||||
<item name="conversation_text_primary_color">@color/abs__primary_text_holo_light</item>
|
||||
<item name="conversation_text_secondary_color">#ffcccccc</item>
|
||||
<item name="conversation_avatar_divet_right">@drawable/divet_right_light</item>
|
||||
<item name="conversation_avatar_divet_left">@drawable/divet_left_light</item>
|
||||
<item name="conversation_editor_background">#eeeeee</item>
|
||||
<item name="conversation_editor_text_color">@color/edit_text_light_theme</item>
|
||||
<item name="conversation_send_button">@drawable/ic_send_holo_light</item>
|
||||
<item name="conversation_send_secure_button">@drawable/ic_send_encrypted_holo_light</item>
|
||||
<item name="conversation_delivered_indicator">@drawable/ic_sms_mms_delivered_light</item>
|
||||
</style>
|
||||
|
||||
<style name="TextSecure.DarkTheme" parent="@style/Theme.Sherlock">
|
||||
<item name="conversation_list_item_background_read">@drawable/conversation_list_item_background_read_dark</item>
|
||||
<item name="conversation_list_item_background_unread">@drawable/conversation_list_item_background_unread_dark</item>
|
||||
<item name="conversation_list_item_background_selected">@drawable/list_selected_holo_dark</item>
|
||||
<item name="conversation_list_item_count_color">#66dddddd</item>
|
||||
|
||||
<item name="conversation_card_background">#ffdddddd</item>
|
||||
<item name="conversation_background">@color/black</item>
|
||||
<item name="conversation_text_primary_color">@color/abs__primary_text_holo_dark</item>
|
||||
<item name="conversation_text_secondary_color">#ffcccccc</item>
|
||||
<item name="conversation_avatar_divet_right">@drawable/divet_right_dark</item>
|
||||
<item name="conversation_avatar_divet_left">@drawable/divet_left_dark</item>
|
||||
<item name="conversation_editor_background">@color/black</item>
|
||||
<item name="conversation_editor_text_color">@color/edit_text_dark_theme</item>
|
||||
<item name="conversation_send_button">@drawable/ic_send_holo_dark</item>
|
||||
<item name="conversation_send_secure_button">@drawable/ic_send_holo_dark_encrypted</item>
|
||||
<item name="conversation_delivered_indicator">@drawable/ic_sms_mms_delivered_dark</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
@ -62,6 +62,15 @@
|
||||
android:summary="@string/preferences__also_vibrate_when_notified" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/preferences__appearance">
|
||||
<ListPreference android:key="pref_theme"
|
||||
android:title="@string/preferences__theme"
|
||||
android:entries="@array/pref_theme_entries"
|
||||
android:entryValues="@array/pref_theme_values"
|
||||
android:defaultValue="light">
|
||||
</ListPreference>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/preferences__storage">
|
||||
<CheckBoxPreference android:defaultValue="false"
|
||||
android:key="pref_trim_threads"
|
||||
|
@ -38,8 +38,10 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
||||
import org.thoughtcrime.securesms.util.Dialogs;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
import org.thoughtcrime.securesms.util.Trimmer;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
|
||||
@ -52,7 +54,9 @@ import java.util.List;
|
||||
*
|
||||
*/
|
||||
|
||||
public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPreferenceActivity {
|
||||
public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPreferenceActivity
|
||||
implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||
{
|
||||
|
||||
private static final int PICK_IDENTITY_CONTACT = 1;
|
||||
|
||||
@ -67,6 +71,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
public static final String PASSPHRASE_TIMEOUT_INTERVAL_PREF = "pref_timeout_interval";
|
||||
public static final String PASSPHRASE_TIMEOUT_PREF = "pref_timeout_passphrase";
|
||||
public static final String AUTO_KEY_EXCHANGE_PREF = "pref_auto_complete_key_exchange";
|
||||
public static final String THEME_PREF = "pref_theme";
|
||||
|
||||
private static final String DISPLAY_CATEGORY_PREF = "pref_display_category";
|
||||
|
||||
@ -93,8 +98,11 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
public static final String REGISTERED_GCM_PREF = "pref_gcm_registered";
|
||||
public static final String GCM_PASSWORD_PREF = "pref_gcm_password";
|
||||
|
||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle icicle) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(icicle);
|
||||
|
||||
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
@ -116,6 +124,24 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
.setOnPreferenceChangeListener(new TrimLengthValidationListener());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
MemoryCleaner.clean((MasterSecret) getIntent().getParcelableExtra("master_secret"));
|
||||
@ -203,6 +229,13 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
if (key.equals(THEME_PREF)) {
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
}
|
||||
|
||||
private class IdentityPreferenceClickListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
@ -328,4 +361,5 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
|
||||
((PreferenceScreen)preference).getDialog().getWindow().getDecorView().setBackgroundDrawable(this.getWindow().getDecorView().getBackground().getConstantState().newDrawable());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
|
||||
import com.actionbarsherlock.app.ActionBar;
|
||||
import com.actionbarsherlock.app.ActionBar.Tab;
|
||||
@ -41,6 +42,8 @@ import com.actionbarsherlock.view.MenuItem;
|
||||
*/
|
||||
public class ContactSelectionActivity extends PassphraseRequiredSherlockFragmentActivity {
|
||||
|
||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
private ContactSelectionListFragment contactsFragment;
|
||||
private ContactSelectionGroupsFragment groupsFragment;
|
||||
private ContactSelectionRecentFragment recentFragment;
|
||||
@ -49,6 +52,7 @@ public class ContactSelectionActivity extends PassphraseRequiredSherlockFragment
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle icicle) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(icicle);
|
||||
|
||||
ActionBar actionBar = this.getSupportActionBar();
|
||||
@ -62,6 +66,12 @@ public class ContactSelectionActivity extends PassphraseRequiredSherlockFragment
|
||||
setupRecentTab();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = this.getSupportMenuInflater();
|
||||
|
@ -24,6 +24,7 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.TypedArray;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
@ -75,6 +76,7 @@ import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage;
|
||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||
import org.thoughtcrime.securesms.util.CharacterCalculator;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.EncryptedCharacterCalculator;
|
||||
import org.thoughtcrime.securesms.util.InvalidMessageException;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
@ -129,9 +131,11 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
private boolean isMmsEnabled = true;
|
||||
|
||||
private CharacterCalculator characterCalculator = new CharacterCalculator();
|
||||
private DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(state);
|
||||
|
||||
setContentView(R.layout.conversation_activity);
|
||||
@ -154,6 +158,8 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
|
||||
initializeSecurity();
|
||||
initializeTitleBar();
|
||||
initializeMmsEnabledCheck();
|
||||
@ -513,21 +519,26 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
|
||||
}
|
||||
|
||||
private void initializeSecurity() {
|
||||
int attributes[] = new int[]{R.attr.conversation_send_button,
|
||||
R.attr.conversation_send_secure_button};
|
||||
TypedArray drawables = obtainStyledAttributes(attributes);
|
||||
|
||||
if (isSingleConversation() &&
|
||||
KeyUtil.isSessionFor(this, getRecipients().getPrimaryRecipient()))
|
||||
{
|
||||
sendButton.setImageResource(R.drawable.ic_send_encrypted_holo_light);
|
||||
sendButton.setImageDrawable(drawables.getDrawable(1));
|
||||
this.isEncryptedConversation = true;
|
||||
this.isAuthenticatedConversation = KeyUtil.isIdentityKeyFor(this, masterSecret, getRecipients().getPrimaryRecipient());
|
||||
this.characterCalculator = new EncryptedCharacterCalculator();
|
||||
} else {
|
||||
sendButton.setImageResource(R.drawable.ic_send_holo_light);
|
||||
sendButton.setImageDrawable(drawables.getDrawable(0));
|
||||
this.isEncryptedConversation = false;
|
||||
this.isAuthenticatedConversation = false;
|
||||
this.characterCalculator = new CharacterCalculator();
|
||||
}
|
||||
|
||||
calculateCharactersRemaining();
|
||||
drawables.recycle();
|
||||
}
|
||||
|
||||
private void initializeMmsEnabledCheck() {
|
||||
|
@ -84,6 +84,7 @@ public class ConversationItem extends LinearLayout {
|
||||
private ImageView contactPhoto;
|
||||
private ImageView deliveredImage;
|
||||
|
||||
private View mmsContainer;
|
||||
private ImageView mmsThumbnail;
|
||||
private Button mmsDownloadButton;
|
||||
private TextView mmsDownloadingLabel;
|
||||
@ -115,6 +116,7 @@ public class ConversationItem extends LinearLayout {
|
||||
this.secureImage = (ImageView)findViewById(R.id.sms_secure_indicator);
|
||||
this.failedImage = (ImageView)findViewById(R.id.sms_failed_indicator);
|
||||
this.keyImage = (ImageView)findViewById(R.id.key_exchange_indicator);
|
||||
this.mmsContainer = (View) findViewById(R.id.mms_view);
|
||||
this.mmsThumbnail = (ImageView)findViewById(R.id.image_view);
|
||||
this.mmsDownloadButton = (Button) findViewById(R.id.mms_download_button);
|
||||
this.mmsDownloadingLabel = (TextView) findViewById(R.id.mms_label_downloading);
|
||||
@ -237,9 +239,11 @@ public class ConversationItem extends LinearLayout {
|
||||
private void setMediaMmsAttributes(MediaMmsMessageRecord messageRecord) {
|
||||
if (messageRecord.getPartCount() > 0) {
|
||||
mmsThumbnail.setVisibility(View.VISIBLE);
|
||||
mmsContainer.setVisibility(View.VISIBLE);
|
||||
mmsThumbnail.setImageDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
} else {
|
||||
mmsThumbnail.setVisibility(View.GONE);
|
||||
mmsContainer.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
slideDeck = messageRecord.getSlideDeck();
|
||||
|
@ -21,18 +21,22 @@ import org.thoughtcrime.securesms.recipients.RecipientFactory;
|
||||
import org.thoughtcrime.securesms.recipients.Recipients;
|
||||
import org.thoughtcrime.securesms.service.KeyCachingService;
|
||||
import org.thoughtcrime.securesms.service.SendReceiveService;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.MemoryCleaner;
|
||||
|
||||
public class ConversationListActivity extends PassphraseRequiredSherlockFragmentActivity
|
||||
implements ConversationListFragment.ConversationSelectedListener
|
||||
{
|
||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
private ConversationListFragment fragment;
|
||||
private MasterSecret masterSecret;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(icicle);
|
||||
|
||||
setContentView(R.layout.conversation_list_activity);
|
||||
getSupportActionBar().setTitle("TextSecure");
|
||||
|
||||
@ -41,6 +45,12 @@ public class ConversationListActivity extends PassphraseRequiredSherlockFragment
|
||||
initializeContactUpdatesReceiver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Log.w("ConversationListActivity", "onDestroy...");
|
||||
|
@ -18,6 +18,7 @@ package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.net.Uri;
|
||||
@ -148,13 +149,21 @@ public class ConversationListItem extends RelativeLayout
|
||||
}
|
||||
|
||||
private void setBackground(boolean read, boolean batch) {
|
||||
int[] attributes = new int[]{R.attr.conversation_list_item_background_selected,
|
||||
R.attr.conversation_list_item_background_read,
|
||||
R.attr.conversation_list_item_background_unread};
|
||||
|
||||
TypedArray drawables = context.obtainStyledAttributes(attributes);
|
||||
|
||||
if (batch && selectedThreads.contains(threadId)) {
|
||||
setBackgroundResource(R.drawable.list_selected_holo_light);
|
||||
setBackgroundDrawable(drawables.getDrawable(0));
|
||||
} else if (read) {
|
||||
setBackgroundResource(R.drawable.conversation_list_item_background_read);
|
||||
setBackgroundDrawable(drawables.getDrawable(1));
|
||||
} else {
|
||||
setBackgroundResource(R.drawable.conversation_list_item_background_unread);
|
||||
setBackgroundDrawable(drawables.getDrawable(2));
|
||||
}
|
||||
|
||||
drawables.recycle();
|
||||
}
|
||||
|
||||
private boolean isBadgeEnabled() {
|
||||
@ -162,12 +171,15 @@ public class ConversationListItem extends RelativeLayout
|
||||
}
|
||||
|
||||
private CharSequence formatFrom(Recipients from, long count, boolean read) {
|
||||
int attributes[] = new int[] {R.attr.conversation_list_item_count_color};
|
||||
TypedArray colors = context.obtainStyledAttributes(attributes);
|
||||
|
||||
String fromString = from.toShortString();
|
||||
SpannableStringBuilder builder = new SpannableStringBuilder(fromString);
|
||||
|
||||
if (count > 0) {
|
||||
builder.append(" " + count);
|
||||
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#66333333")),
|
||||
builder.setSpan(new ForegroundColorSpan(colors.getColor(0,0)),
|
||||
fromString.length(), builder.length(),
|
||||
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
@ -177,6 +189,7 @@ public class ConversationListItem extends RelativeLayout
|
||||
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
colors.recycle();
|
||||
return builder;
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
|
||||
public class CountrySelectionActivity extends SherlockFragmentActivity
|
||||
implements CountrySelectionFragment.CountrySelectedListener
|
||||
|
@ -17,11 +17,13 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.SerializableKey;
|
||||
import org.thoughtcrime.securesms.util.Base64;
|
||||
import org.thoughtcrime.securesms.util.Dialogs;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
|
||||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuInflater;
|
||||
@ -36,6 +38,20 @@ import com.google.zxing.integration.android.IntentResult;
|
||||
*/
|
||||
public abstract class KeyScanningActivity extends PassphraseRequiredSherlockActivity {
|
||||
|
||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle bundle) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(bundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
|
@ -20,14 +20,26 @@ import android.os.Bundle;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
|
||||
public class ReviewIdentitiesActivity extends SherlockFragmentActivity {
|
||||
|
||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
dynamicTheme.onCreate(this);
|
||||
super.onCreate(bundle);
|
||||
setContentView(R.layout.review_identities);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
dynamicTheme.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
|
@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
@ -45,19 +46,24 @@ public class ImageDivet extends ImageView {
|
||||
}
|
||||
|
||||
private void setDrawable() {
|
||||
Resources r = getContext().getResources();
|
||||
int attributes[] = new int[] {R.attr.conversation_avatar_divet_left,
|
||||
R.attr.conversation_avatar_divet_right};
|
||||
|
||||
TypedArray drawables = getContext().obtainStyledAttributes(attributes);
|
||||
|
||||
switch (position) {
|
||||
case 0:
|
||||
drawable = r.getDrawable(R.drawable.divet_right);
|
||||
drawable = drawables.getDrawable(1);
|
||||
break;
|
||||
case 1:
|
||||
drawable = r.getDrawable(R.drawable.divet_left);
|
||||
drawable = drawables.getDrawable(0);
|
||||
break;
|
||||
}
|
||||
|
||||
drawableIntrinsicWidth = drawable.getIntrinsicWidth();
|
||||
drawableIntrinsicHeight = drawable.getIntrinsicHeight();
|
||||
|
||||
drawables.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -103,6 +103,9 @@ public class ImageSlide extends Slide {
|
||||
|
||||
imageView.setImageDrawable(temporaryDrawable);
|
||||
|
||||
if (maxWidth == 0 || maxHeight == 0)
|
||||
return;
|
||||
|
||||
MmsDatabase.slideResolver.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
61
src/org/thoughtcrime/securesms/util/DynamicTheme.java
Normal file
@ -0,0 +1,61 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
public class DynamicTheme {
|
||||
|
||||
private int currentTheme;
|
||||
|
||||
public void onCreate(Activity activity) {
|
||||
currentTheme = getSelectedTheme(activity);
|
||||
activity.setTheme(currentTheme);
|
||||
}
|
||||
|
||||
public void onResume(Activity activity) {
|
||||
if (currentTheme != getSelectedTheme(activity)) {
|
||||
Intent intent = activity.getIntent();
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
||||
|
||||
activity.startActivity(intent);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
|
||||
OverridePendingTransition.invoke(activity);
|
||||
}
|
||||
|
||||
activity.finish();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
|
||||
OverridePendingTransition.invoke(activity);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static int getSelectedTheme(Context context) {
|
||||
String theme = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString(ApplicationPreferencesActivity.THEME_PREF, "light");
|
||||
|
||||
return getSelectedTheme(theme);
|
||||
}
|
||||
|
||||
public static int getSelectedTheme(String theme) {
|
||||
if (theme.equals("light")) {
|
||||
return R.style.TextSecure_LightTheme;
|
||||
} else if (theme.equals("dark")) {
|
||||
return R.style.TextSecure_DarkTheme;
|
||||
}
|
||||
|
||||
return R.style.TextSecure_LightTheme;
|
||||
}
|
||||
|
||||
private static final class OverridePendingTransition {
|
||||
static void invoke(Activity activity) {
|
||||
activity.overridePendingTransition(0, 0);
|
||||
}
|
||||
}
|
||||
}
|
@ -184,7 +184,6 @@ public class Util {
|
||||
return new String(bout.toByteArray());
|
||||
}
|
||||
|
||||
|
||||
// public static Bitmap loadScaledBitmap(InputStream src, int targetWidth, int targetHeight) {
|
||||
// return BitmapFactory.decodeStream(src);
|
||||
//// BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
|