fixed crashes on tablets
improved performance by reducing setTheme() call
This commit is contained in:
parent
f99df87959
commit
b1e00a9dce
|
@ -101,6 +101,10 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
|||
public static final String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me";
|
||||
public static final String AUTHORITY_MUTES_USERS = "mutes_users";
|
||||
public static final String AUTHORITY_NOTIFICATIONS = "notifications";
|
||||
public static final String AUTHORITY_ACCOUNTS = "accounts";
|
||||
public static final String AUTHORITY_DRAFTS = "drafts";
|
||||
public static final String AUTHORITY_FILTERS = "filters";
|
||||
public static final String AUTHORITY_PROFILE_EDITOR = "profile_editor";
|
||||
|
||||
public static final String QUERY_PARAM_ACCOUNT_ID = "account_id";
|
||||
public static final String QUERY_PARAM_ACCOUNT_IDS = "account_ids";
|
||||
|
|
|
@ -34,9 +34,7 @@ public interface IntentConstants {
|
|||
public static final String INTENT_ACTION_SETTINGS = INTENT_PACKAGE_PREFIX + "SETTINGS";
|
||||
public static final String INTENT_ACTION_SELECT_ACCOUNT = INTENT_PACKAGE_PREFIX + "SELECT_ACCOUNT";
|
||||
public static final String INTENT_ACTION_VIEW_MEDIA = INTENT_PACKAGE_PREFIX + "VIEW_MEDIA";
|
||||
public static final String INTENT_ACTION_FILTERS = INTENT_PACKAGE_PREFIX + "FILTERS";
|
||||
public static final String INTENT_ACTION_TWITTER_LOGIN = INTENT_PACKAGE_PREFIX + "TWITTER_LOGIN";
|
||||
public static final String INTENT_ACTION_DRAFTS = INTENT_PACKAGE_PREFIX + "DRAFTS";
|
||||
public static final String INTENT_ACTION_PICK_FILE = INTENT_PACKAGE_PREFIX + "PICK_FILE";
|
||||
public static final String INTENT_ACTION_PICK_DIRECTORY = INTENT_PACKAGE_PREFIX + "PICK_DIRECTORY";
|
||||
public static final String INTENT_ACTION_VIEW_WEBPAGE = INTENT_PACKAGE_PREFIX + "VIEW_WEBPAGE";
|
||||
|
@ -44,7 +42,6 @@ public interface IntentConstants {
|
|||
public static final String INTENT_ACTION_CUSTOM_TABS = INTENT_PACKAGE_PREFIX + "CUSTOM_TABS";
|
||||
public static final String INTENT_ACTION_ADD_TAB = INTENT_PACKAGE_PREFIX + "ADD_TAB";
|
||||
public static final String INTENT_ACTION_EDIT_TAB = INTENT_PACKAGE_PREFIX + "EDIT_TAB";
|
||||
public static final String INTENT_ACTION_EDIT_USER_PROFILE = INTENT_PACKAGE_PREFIX + "EDIT_USER_PROFILE";
|
||||
public static final String INTENT_ACTION_SERVICE_COMMAND = INTENT_PACKAGE_PREFIX + "SERVICE_COMMAND";
|
||||
public static final String INTENT_ACTION_REQUEST_PERMISSIONS = INTENT_PACKAGE_PREFIX + "REQUEST_PERMISSIONS";
|
||||
public static final String INTENT_ACTION_SELECT_USER_LIST = INTENT_PACKAGE_PREFIX + "SELECT_USER_LIST";
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
android:name=".activity.support.OpenStreetMapViewerActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/view_map"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge">
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
android:name=".activity.support.GoogleMapViewerActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/view_map"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge">
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
|
||||
|
|
|
@ -5,61 +5,61 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-sdk/>
|
||||
<uses-sdk />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.location"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.location.gps"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.location.network"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.nfc"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:glEsVersion="0x00020000"
|
||||
android:required="true"/>
|
||||
android:required="true" />
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.NFC"/>
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.SHORTEN_STATUS"/>
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.UPLOAD_MEDIA"/>
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.SYNC_TIMELINE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.SHORTEN_STATUS" />
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.UPLOAD_MEDIA" />
|
||||
<uses-permission android:name="org.mariotaku.twidere.permission.SYNC_TIMELINE" />
|
||||
|
||||
<permission-group
|
||||
android:name="org.mariotaku.twidere.permission.PERMISSION_GROUP"
|
||||
android:label="@string/app_name"/>
|
||||
android:label="@string/app_name" />
|
||||
|
||||
<permission
|
||||
android:name="org.mariotaku.twidere.permission.SHORTEN_STATUS"
|
||||
android:description="@string/permission_description_shorten_status"
|
||||
android:label="@string/permission_label_shorten_status"
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP"/>
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP" />
|
||||
<permission
|
||||
android:name="org.mariotaku.twidere.permission.UPLOAD_MEDIA"
|
||||
android:description="@string/permission_description_upload_media"
|
||||
android:label="@string/permission_label_upload_media"
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP"/>
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP" />
|
||||
<permission
|
||||
android:name="org.mariotaku.twidere.permission.SYNC_TIMELINE"
|
||||
android:description="@string/permission_description_sync_timeline"
|
||||
android:label="@string/permission_label_sync_timeline"
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP"/>
|
||||
android:permissionGroup="org.mariotaku.twidere.permission.PERMISSION_GROUP" />
|
||||
|
||||
<application
|
||||
android:name=".app.TwidereApplication"
|
||||
|
@ -68,32 +68,32 @@
|
|||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Blank">
|
||||
android:theme="@style/Theme.Twidere.Dark.NoActionBar">
|
||||
<uses-library
|
||||
android:name="com.sec.android.app.multiwindow"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.backup.api_key"
|
||||
android:value="AEdPqrEAAAAIKbKATV1AGbLB4kem3w8QaPVJSPVVumbMHxkfwA"/>
|
||||
android:value="AEdPqrEAAAAIKbKATV1AGbLB4kem3w8QaPVJSPVVumbMHxkfwA" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.support.multiwindow"
|
||||
android:value="true"/>
|
||||
android:value="true" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W"
|
||||
android:value="480dp"/>
|
||||
android:value="480dp" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H"
|
||||
android:value="640dp"/>
|
||||
android:value="640dp" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W"
|
||||
android:value="240dp"/>
|
||||
android:value="240dp" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H"
|
||||
android:value="320dp"/>
|
||||
android:value="320dp" />
|
||||
<meta-data
|
||||
android:name="override_tinted_status_bar_defaults"
|
||||
android:value="true"/>
|
||||
android:value="true" />
|
||||
|
||||
<activity
|
||||
android:name=".activity.MainActivity"
|
||||
|
@ -103,11 +103,11 @@
|
|||
android:theme="@style/Theme.Launcher"
|
||||
android:windowSoftInputMode="adjustNothing">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -119,100 +119,101 @@
|
|||
android:theme="@style/Theme.Launcher"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.HomeActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.Dark.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.HOME"/>
|
||||
<action android:name="org.mariotaku.twidere.HOME" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEARCH"/>
|
||||
<action android:name="android.intent.action.SEARCH" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.app.searchable"
|
||||
android:resource="@xml/searchable"/>
|
||||
android:resource="@xml/searchable" />
|
||||
<meta-data
|
||||
android:name="android.app.default_searchable"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.support.HomeActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.ComposeActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:label="@string/compose"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Blank.Dialog"
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter android:label="@string/compose">
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="org.mariotaku.twidere.COMPOSE"/>
|
||||
<action android:name="org.mariotaku.twidere.REPLY"/>
|
||||
<action android:name="org.mariotaku.twidere.QUOTE"/>
|
||||
<action android:name="org.mariotaku.twidere.EDIT_DRAFT"/>
|
||||
<action android:name="org.mariotaku.twidere.MENTION"/>
|
||||
<action android:name="org.mariotaku.twidere.REPLY_MULTIPLE"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<action android:name="org.mariotaku.twidere.COMPOSE" />
|
||||
<action android:name="org.mariotaku.twidere.REPLY" />
|
||||
<action android:name="org.mariotaku.twidere.QUOTE" />
|
||||
<action android:name="org.mariotaku.twidere.EDIT_DRAFT" />
|
||||
<action android:name="org.mariotaku.twidere.MENTION" />
|
||||
<action android:name="org.mariotaku.twidere.REPLY_MULTIPLE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.SEND"/>
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE"/>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:mimeType="image/*"/>
|
||||
<data android:mimeType="text/plain"/>
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.support.HomeActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.QuickSearchBarActivity"
|
||||
android:label="@string/search"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Blank.Dialog"
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.GLOBAL_SEARCH"/>
|
||||
<action android:name="org.mariotaku.twidere.GLOBAL_SEARCH" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.SignInActivity"
|
||||
android:label="@string/sign_in"
|
||||
android:theme="@style/Theme.Twidere.Dark"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.TWITTER_LOGIN"/>
|
||||
<action android:name="org.mariotaku.twidere.TWITTER_LOGIN" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.BrowserSignInActivity"
|
||||
android:label="@string/browser_sign_in"
|
||||
android:theme="@style/Theme.Blank.Dialog"
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.TWITTER_BROWSER_LOGIN"/>
|
||||
<action android:name="org.mariotaku.twidere.TWITTER_BROWSER_LOGIN" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -221,45 +222,29 @@
|
|||
android:theme="@style/Theme.Twidere.Dark"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MANAGE_NETWORK_USAGE"/>
|
||||
<action android:name="org.mariotaku.twidere.SETTINGS"/>
|
||||
<action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
|
||||
<action android:name="org.mariotaku.twidere.SETTINGS" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.FiltersActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/filters"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.FILTERS"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.support.HomeActivity" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.APIEditorActivity"
|
||||
android:label="@string/edit_api"
|
||||
android:theme="@style/Theme.Blank.Dialog"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog"
|
||||
android:windowSoftInputMode="adjustResize" />
|
||||
<activity
|
||||
android:name=".activity.support.AccountSelectorActivity"
|
||||
android:label="@string/select_account"
|
||||
android:theme="@style/Theme.Blank.Dialog">
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.SELECT_ACCOUNT"/>
|
||||
<action android:name="org.mariotaku.twidere.SELECT_ACCOUNT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -267,142 +252,36 @@
|
|||
android:exported="false"
|
||||
android:label="@string/browser">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.VIEW_WEBPAGE"/>
|
||||
<action android:name="org.mariotaku.twidere.VIEW_WEBPAGE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:scheme="file"/>
|
||||
<data android:scheme="http"/>
|
||||
<data android:scheme="https"/>
|
||||
<data android:scheme="file" />
|
||||
<data android:scheme="http" />
|
||||
<data android:scheme="https" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.ColorPickerDialogActivity"
|
||||
android:label="@string/set_color"
|
||||
android:theme="@style/Theme.Twidere.Light.NoDisplay"/>
|
||||
android:theme="@style/Theme.Twidere.Light.NoDisplay" />
|
||||
<activity
|
||||
android:name=".activity.support.LinkHandlerActivity"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
android:value=".activity.support.HomeActivity" />
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data
|
||||
android:host="user"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="users"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_timeline"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_media_timeline"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_favorites"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_followers"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_friends"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_blocks"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="status"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="status_retweeters"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="status_favoriters"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="status_replies"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="statuses"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="direct_messages_conversation"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_list"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_lists"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_list_timeline"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_list_members"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_list_subscribers"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_list_memberships"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="saved_searches"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="user_mentions"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="incoming_friendships"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="search"
|
||||
android:scheme="twidere"/>
|
||||
<data
|
||||
android:host="mutes_users"
|
||||
android:scheme="twidere"/>
|
||||
<data android:scheme="twidere" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.DraftsActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/drafts"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.DRAFTS"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.AccountsManagerActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/accounts"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.ACCOUNTS"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".activity.support.HomeActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.MediaViewerActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
|
@ -411,14 +290,14 @@
|
|||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Twidere.Viewer">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.VIEW_MEDIA"/>
|
||||
<action android:name="org.mariotaku.twidere.VIEW_MEDIA" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="http"/>
|
||||
<data android:scheme="https"/>
|
||||
<data android:scheme="file"/>
|
||||
<data android:scheme="http" />
|
||||
<data android:scheme="https" />
|
||||
<data android:scheme="file" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -428,10 +307,10 @@
|
|||
android:theme="@style/Theme.Twidere.Light.NoDisplay"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.PICK_FILE"/>
|
||||
<action android:name="org.mariotaku.twidere.PICK_DIRECTORY"/>
|
||||
<action android:name="org.mariotaku.twidere.PICK_FILE" />
|
||||
<action android:name="org.mariotaku.twidere.PICK_DIRECTORY" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -440,36 +319,24 @@
|
|||
android:theme="@style/Theme.Twidere.Light.NoDisplay"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="org.mariotaku.twidere.PICK_IMAGE"/>
|
||||
<action android:name="org.mariotaku.twidere.TAKE_PHOTO"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<action android:name="org.mariotaku.twidere.PICK_IMAGE" />
|
||||
<action android:name="org.mariotaku.twidere.TAKE_PHOTO" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.UserProfileEditorActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/edit_profile"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.EDIT_USER_PROFILE"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.CustomTabEditorActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/add_tab"
|
||||
android:theme="@style/Theme.Blank.Dialog"
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.ADD_TAB"/>
|
||||
<action android:name="org.mariotaku.twidere.EDIT_TAB"/>
|
||||
<action android:name="org.mariotaku.twidere.ADD_TAB" />
|
||||
<action android:name="org.mariotaku.twidere.EDIT_TAB" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -477,60 +344,60 @@
|
|||
android:label="@string/compose"
|
||||
android:theme="@style/Theme.Twidere.Dark.NoDisplay">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
|
||||
<action android:name="android.intent.action.CREATE_SHORTCUT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.RequestPermissionsActivity"
|
||||
android:label="@string/permissions_request"
|
||||
android:theme="@style/Theme.Blank.Dialog">
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.REQUEST_PERMISSIONS"/>
|
||||
<action android:name="org.mariotaku.twidere.REQUEST_PERMISSIONS" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.CameraCropActivity"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.CAMERA_CROP"/>
|
||||
<action android:name="org.mariotaku.twidere.CAMERA_CROP" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.support.UserListSelectorActivity"
|
||||
android:label="@string/select_user_list"
|
||||
android:theme="@style/Theme.Blank.Dialog">
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.SELECT_USER"/>
|
||||
<action android:name="org.mariotaku.twidere.SELECT_USER_LIST"/>
|
||||
<action android:name="org.mariotaku.twidere.SELECT_USER" />
|
||||
<action android:name="org.mariotaku.twidere.SELECT_USER_LIST" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.SettingsWizardActivity"
|
||||
android:label="@string/settings_wizard"
|
||||
android:theme="@style/Theme.Twidere.Wizard"/>
|
||||
android:theme="@style/Theme.Twidere.Wizard" />
|
||||
<activity
|
||||
android:name=".activity.support.DataExportActivity"
|
||||
android:label="@string/export_settings"
|
||||
android:theme="@android:style/Theme.NoDisplay"/>
|
||||
android:theme="@android:style/Theme.NoDisplay" />
|
||||
<activity
|
||||
android:name=".activity.support.DataImportActivity"
|
||||
android:label="@string/import_settings"
|
||||
android:theme="@android:style/Theme.NoDisplay"/>
|
||||
android:theme="@android:style/Theme.NoDisplay" />
|
||||
<activity
|
||||
android:name=".activity.support.ActivityPickerActivity"
|
||||
android:theme="@style/Theme.Blank.Dialog">
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.PICK_ACTIVITY"/>
|
||||
<action android:name="org.mariotaku.twidere.PICK_ACTIVITY" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -542,33 +409,33 @@
|
|||
<data
|
||||
android:host="twitter.com"
|
||||
android:scheme="http"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
<data
|
||||
android:host="twitter.com"
|
||||
android:scheme="https"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
<data
|
||||
android:host="www.twitter.com"
|
||||
android:scheme="http"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
<data
|
||||
android:host="www.twitter.com"
|
||||
android:scheme="https"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
<data
|
||||
android:host="mobile.twitter.com"
|
||||
android:scheme="http"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
<data
|
||||
android:host="mobile.twitter.com"
|
||||
android:scheme="https"
|
||||
android:pathPrefix="/"/>
|
||||
android:pathPrefix="/" />
|
||||
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
|
@ -578,18 +445,18 @@
|
|||
android:taskAffinity=":twidere_assist_launcher"
|
||||
android:theme="@style/Theme.Launcher">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.ASSIST"/>
|
||||
<action android:name="android.intent.action.ASSIST" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="com.android.systemui.action_assist_icon"
|
||||
android:resource="@drawable/ic_assist_twidere"/>
|
||||
android:resource="@drawable/ic_assist_twidere" />
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.KeyboardShortcutPreferenceCompatActivity"
|
||||
android:theme="@style/Theme.Blank.Dialog"/>
|
||||
android:theme="@style/Theme.Twidere.Dark.Dialog" />
|
||||
<activity
|
||||
android:name=".activity.TestActivity"
|
||||
android:enabled="false"
|
||||
|
@ -597,27 +464,27 @@
|
|||
android:launchMode="singleTop"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".activity.NyanActivity"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/Theme.Nyan"
|
||||
android:windowSoftInputMode="stateAlwaysHidden"/>
|
||||
android:windowSoftInputMode="stateAlwaysHidden" />
|
||||
<activity
|
||||
android:name=".activity.UsageStatisticsActivity"
|
||||
android:label="@string/usage_statistics"
|
||||
android:theme="@android:style/Theme.NoDisplay"/>
|
||||
android:theme="@android:style/Theme.NoDisplay" />
|
||||
|
||||
<service
|
||||
android:name=".service.RefreshService"
|
||||
android:label="@string/label_refresh_service"/>
|
||||
android:label="@string/label_refresh_service" />
|
||||
<service
|
||||
android:name=".service.BackgroundOperationService"
|
||||
android:label="@string/label_background_operation_service"/>
|
||||
android:label="@string/label_background_operation_service" />
|
||||
<service
|
||||
android:name=".nyan.NyanWallpaperService"
|
||||
android:enabled="false"
|
||||
|
@ -627,12 +494,12 @@
|
|||
android:permission="android.permission.BIND_WALLPAPER"
|
||||
android:process=":wallpaper">
|
||||
<intent-filter android:priority="1">
|
||||
<action android:name="android.service.wallpaper.WallpaperService"/>
|
||||
<action android:name="android.service.wallpaper.WallpaperService" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.service.wallpaper"
|
||||
android:resource="@xml/nyan_wallpaper"/>
|
||||
android:resource="@xml/nyan_wallpaper" />
|
||||
</service>
|
||||
<service
|
||||
android:name=".nyan.NyanDaydreamService"
|
||||
|
@ -643,7 +510,7 @@
|
|||
android:process=":daydream"
|
||||
tools:ignore="ExportedService">
|
||||
<intent-filter android:priority="1">
|
||||
<action android:name="android.service.dreams.DreamService"/>
|
||||
<action android:name="android.service.dreams.DreamService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
|
@ -653,67 +520,65 @@
|
|||
android:exported="true"
|
||||
android:grantUriPermissions="true"
|
||||
android:label="@string/label_data_provider"
|
||||
tools:ignore="ExportedContentProvider"/>
|
||||
tools:ignore="ExportedContentProvider" />
|
||||
<provider
|
||||
android:name=".provider.TwidereCommandProvider"
|
||||
android:authorities="twidere.command"
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedContentProvider"/>
|
||||
tools:ignore="ExportedContentProvider" />
|
||||
<provider
|
||||
android:name=".provider.RecentSearchProvider"
|
||||
android:authorities="org.mariotaku.twidere.provider.SearchRecentSuggestions"
|
||||
tools:ignore="ExportedContentProvider"/>
|
||||
tools:ignore="ExportedContentProvider" />
|
||||
|
||||
<receiver android:name=".receiver.ConnectivityStateReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver
|
||||
android:name=".receiver.NotificationReceiver"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="org.mariotaku.twidere.NOTIFICATION_DELETED"/>
|
||||
<action android:name="org.mariotaku.twidere.NOTIFICATION_DELETED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver
|
||||
android:name=".receiver.SecretCodeBroadcastReceiver"
|
||||
android:label="@string/twidere_test">
|
||||
<intent-filter>
|
||||
<action android:name="android.provider.Telephony.SECRET_CODE"/>
|
||||
<action android:name="android.provider.Telephony.SECRET_CODE" />
|
||||
|
||||
<data
|
||||
android:host="8943373"
|
||||
android:scheme="android_secret_code"/>
|
||||
android:scheme="android_secret_code" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- Begin third Party components -->
|
||||
|
||||
<service
|
||||
android:name="edu.ucdavis.earlybird.UCDService"/>
|
||||
<service android:name="edu.ucdavis.earlybird.UCDService" />
|
||||
<receiver
|
||||
android:name="edu.ucdavis.earlybird.UploadReceiver"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE"/>
|
||||
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
|
||||
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
|
||||
<action android:name="edu.ucdavis.earlybird.UPLOAD_PROFILE"/>
|
||||
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
|
||||
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
|
||||
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
|
||||
<action android:name="edu.ucdavis.earlybird.UPLOAD_PROFILE" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<!-- SPICE -->
|
||||
<service
|
||||
android:name="edu.tsinghua.spice.SpiceService"/>
|
||||
<service android:name="edu.tsinghua.spice.SpiceService" />
|
||||
<receiver
|
||||
android:name="edu.tsinghua.spice.SpiceUploadReceiver"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE"/>
|
||||
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
|
||||
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
|
||||
<action android:name="edu.tsinghua.spice.UPLOAD_PROFILE"/>
|
||||
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
|
||||
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
|
||||
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
|
||||
<action android:name="edu.tsinghua.spice.UPLOAD_PROFILE" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package android.support.v7.app;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/27.
|
||||
*/
|
||||
public class AppCompatDelegateTrojan {
|
||||
|
||||
@Nullable
|
||||
public static ActionBar peekActionBar(@Nullable AppCompatDelegate delegate) {
|
||||
if (delegate instanceof AppCompatDelegateImplBase)
|
||||
return ((AppCompatDelegateImplBase) delegate).peekSupportActionBar();
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isFloating(AppCompatDelegate delegate) {
|
||||
if (delegate instanceof AppCompatDelegateImplBase)
|
||||
return ((AppCompatDelegateImplBase) delegate).mIsFloating;
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -141,6 +141,10 @@ public interface Constants extends TwidereConstants {
|
|||
int LINK_ID_STATUS_FAVORITERS = 27;
|
||||
int LINK_ID_SEARCH = 28;
|
||||
int LINK_ID_MUTES_USERS = 41;
|
||||
int LINK_ID_ACCOUNTS = 101;
|
||||
int LINK_ID_DRAFTS = 102;
|
||||
int LINK_ID_FILTERS = 103;
|
||||
int LINK_ID_PROFILE_EDITOR = 104;
|
||||
|
||||
String DIR_NAME_IMAGE_CACHE = "image_cache";
|
||||
String DIR_NAME_FULL_IMAGE_CACHE = "full_image_cache";
|
||||
|
|
|
@ -150,7 +150,7 @@ public abstract class AppCompatPreferenceActivity extends PreferenceActivity imp
|
|||
getDelegate().setTitle(title);
|
||||
}
|
||||
|
||||
private AppCompatDelegate getDelegate() {
|
||||
public AppCompatDelegate getDelegate() {
|
||||
if (mDelegate == null) {
|
||||
mDelegate = AppCompatDelegate.create(this, this);
|
||||
}
|
||||
|
|
|
@ -20,11 +20,11 @@
|
|||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
|
@ -46,7 +46,7 @@ import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
|||
import org.mariotaku.twidere.util.StrictModeUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
||||
import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
|
||||
|
@ -143,10 +143,8 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
|
|||
StrictModeUtils.detectAllVmPolicy();
|
||||
StrictModeUtils.detectAllThreadPolicy();
|
||||
}
|
||||
setTheme();
|
||||
setupWindow();
|
||||
super.onCreate(savedInstanceState);
|
||||
setupActionBar();
|
||||
mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
|
||||
}
|
||||
|
||||
|
@ -236,7 +234,7 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
|
|||
final Toolbar toolbar = (Toolbar) actionBarView;
|
||||
ThemeUtils.setActionBarOverflowColor(toolbar, itemColor);
|
||||
final int popupColor = ThemeUtils.getThemeForegroundColor(toolbar.getContext(), toolbar.getPopupTheme());
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewUtils.findViewByType(actionBarView, ActionMenuView.class), itemColor, popupColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewSupport.findViewByType(actionBarView, ActionMenuView.class), itemColor, popupColor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -255,15 +253,26 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
|
|||
return (FrameLayout) view.findViewById(R.id.main_content);
|
||||
}
|
||||
|
||||
private void setTheme() {
|
||||
mCurrentThemeResource = getThemeResourceId();
|
||||
@Override
|
||||
protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resid, boolean first) {
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
mCurrentThemeFontFamily = getThemeFontFamily();
|
||||
setTheme(mCurrentThemeResource);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource, mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
super.onApplyThemeResource(theme, resid, first);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTheme(int resid) {
|
||||
super.setTheme(mCurrentThemeResource = getThemeResourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
setupActionBar();
|
||||
}
|
||||
|
||||
private void setupActionBar() {
|
||||
|
@ -299,9 +308,9 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
|
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
getWindow().addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
}
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_MODE_OVERLAY);
|
||||
// supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
// supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
|
||||
// supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_MODE_OVERLAY);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,7 +20,9 @@
|
|||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
|
@ -102,8 +104,6 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi
|
|||
StrictModeUtils.detectAllVmPolicy();
|
||||
StrictModeUtils.detectAllThreadPolicy();
|
||||
}
|
||||
|
||||
setTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
setActionBarBackground();
|
||||
}
|
||||
|
@ -119,14 +119,20 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi
|
|||
private void setActionBarBackground() {
|
||||
}
|
||||
|
||||
private void setTheme() {
|
||||
mCurrentThemeResource = getThemeResourceId();
|
||||
@Override
|
||||
public void setTheme(int resid) {
|
||||
super.setTheme(mCurrentThemeResource = getThemeResourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resid, boolean first) {
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeFontFamily = getThemeFontFamily();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
setTheme(mCurrentThemeResource);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource, mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
super.onApplyThemeResource(theme, resid, first);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.NavUtils;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.BaseDialogWhenLargeActivity;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredKeywordsFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredLinksFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredSourcesFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredUsersFragment;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.TabPagerIndicator;
|
||||
|
||||
public class FiltersActivity extends BaseDialogWhenLargeActivity {
|
||||
|
||||
private TabPagerIndicator mPagerIndicator;
|
||||
private ViewPager mViewPager;
|
||||
|
||||
private SupportTabsAdapter mAdapter;
|
||||
|
||||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_HOME: {
|
||||
NavUtils.navigateUpFromSameTask(this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_filters);
|
||||
mAdapter = new SupportTabsAdapter(this, getSupportFragmentManager(), null, 1);
|
||||
mViewPager.setAdapter(mAdapter);
|
||||
mViewPager.setOffscreenPageLimit(2);
|
||||
mPagerIndicator.setViewPager(mViewPager);
|
||||
mPagerIndicator.setTabDisplayOption(TabPagerIndicator.LABEL);
|
||||
|
||||
|
||||
mAdapter.addTab(FilteredUsersFragment.class, null, getString(R.string.users), null, 0, null);
|
||||
mAdapter.addTab(FilteredKeywordsFragment.class, null, getString(R.string.keywords), null, 1, null);
|
||||
mAdapter.addTab(FilteredSourcesFragment.class, null, getString(R.string.sources), null, 2, null);
|
||||
mAdapter.addTab(FilteredLinksFragment.class, null, getString(R.string.links), null, 3, null);
|
||||
|
||||
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(this, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(this, new EmptyDrawable());
|
||||
ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isActionBarOutlineEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
mViewPager = (ViewPager) findViewById(R.id.view_pager);
|
||||
mPagerIndicator = (TabPagerIndicator) findViewById(R.id.view_pager_tabs);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -33,7 +33,6 @@ import android.content.res.Resources;
|
|||
import android.graphics.PorterDuff.Mode;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.KeyEvent;
|
||||
|
@ -257,7 +256,7 @@ public class SettingsActivity extends BasePreferenceActivity {
|
|||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
// supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
super.onCreate(savedInstanceState);
|
||||
setIntent(getIntent().addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
|
@ -270,7 +269,7 @@ public class SettingsActivity extends BasePreferenceActivity {
|
|||
final ListView listView = getListView();
|
||||
if (listView != null) {
|
||||
listView.setDivider(new EmptyDrawable());
|
||||
listView.setChoiceMode(isMultiPane() ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE);
|
||||
// listView.setChoiceMode(isMultiPane() ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE);
|
||||
listView.setDividerHeight(0);
|
||||
final LayoutParams lp = listView.getLayoutParams();
|
||||
if (lp instanceof MarginLayoutParams) {
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
package org.mariotaku.twidere.activity.support;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.fragment.support.AccountsManagerFragment;
|
||||
|
||||
/**
|
||||
* Accounts manager
|
||||
* Created by mariotaku on 14/10/26.
|
||||
*/
|
||||
public class AccountsManagerActivity extends BaseDialogWhenLargeActivity {
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_HOME: {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
setContentView(R.layout.activity_accounts_manager);
|
||||
final FragmentManager fm = getSupportFragmentManager();
|
||||
final FragmentTransaction ft = fm.beginTransaction();
|
||||
ft.replace(R.id.main_content, new AccountsManagerFragment());
|
||||
ft.commit();
|
||||
}
|
||||
}
|
|
@ -69,7 +69,7 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
|
|||
|
||||
@Override
|
||||
public int getThemeResourceId() {
|
||||
return ThemeUtils.getThemeResource(this);
|
||||
return ThemeUtils.getNoActionBarThemeResource(this);
|
||||
}
|
||||
|
||||
public TwidereApplication getTwidereApplication() {
|
||||
|
@ -86,7 +86,11 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
|
|||
|
||||
@Override
|
||||
public void onFitSystemWindows(Rect insets) {
|
||||
mSystemWindowsInsets = new Rect(insets);
|
||||
if (mSystemWindowsInsets == null)
|
||||
mSystemWindowsInsets = new Rect(insets);
|
||||
else {
|
||||
mSystemWindowsInsets.set(insets);
|
||||
}
|
||||
notifyControlBarOffsetChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -21,28 +21,26 @@ package org.mariotaku.twidere.activity.support;
|
|||
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.iface.TintedStatusLayout;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/17.
|
||||
*/
|
||||
public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
||||
|
||||
private TintedStatusFrameLayout mMainContent;
|
||||
private TintedStatusLayout mMainContent;
|
||||
|
||||
@Override
|
||||
public final int getThemeResourceId() {
|
||||
public int getThemeResourceId() {
|
||||
return ThemeUtils.getDialogWhenLargeThemeResource(this);
|
||||
}
|
||||
|
||||
|
@ -50,21 +48,19 @@ public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setupWindow();
|
||||
super.onCreate(savedInstanceState);
|
||||
setupActionBar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
final boolean result = super.onPrepareOptionsMenu(menu);
|
||||
if (!shouldSetActionItemColor()) return result;
|
||||
final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
if (toolbar != null) {
|
||||
final int themeColor = getCurrentThemeColor();
|
||||
final int themeId = getCurrentThemeResourceId();
|
||||
final int itemColor = ThemeUtils.getContrastActionBarItemColor(this, themeId, themeColor);
|
||||
final Toolbar toolbar = (Toolbar) actionBarView;
|
||||
ThemeUtils.setActionBarOverflowColor(toolbar, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewUtils.findViewByType(actionBarView, ActionMenuView.class), itemColor, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewSupport.findViewByType(toolbar, ActionMenuView.class), itemColor, itemColor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -72,11 +68,11 @@ public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
|||
@Override
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
mMainContent = (TintedStatusFrameLayout) findViewById(R.id.main_content);
|
||||
mMainContent = (TintedStatusLayout) findViewById(R.id.main_content);
|
||||
setupTintStatusBar();
|
||||
}
|
||||
|
||||
protected TintedStatusFrameLayout getMainContent() {
|
||||
protected TintedStatusLayout getMainContent() {
|
||||
return mMainContent;
|
||||
}
|
||||
|
||||
|
@ -88,6 +84,12 @@ public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
setupActionBar();
|
||||
}
|
||||
|
||||
private void setupActionBar() {
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar == null) return;
|
||||
|
@ -98,7 +100,12 @@ public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
|||
final int titleColor = ThemeUtils.getContrastActionBarTitleColor(this, themeId, themeColor);
|
||||
final int actionBarItemsColor = ThemeUtils.getContrastActionBarItemColor(this, themeId, themeColor);
|
||||
ThemeUtils.applyActionBarBackground(actionBar, this, themeId, themeColor, option, isActionBarOutlineEnabled());
|
||||
ThemeUtils.setActionBarColor(getWindow(), actionBar, titleColor, actionBarItemsColor);
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
if (toolbar != null) {
|
||||
ThemeUtils.setToolBarColor(toolbar, titleColor, actionBarItemsColor);
|
||||
} else {
|
||||
ThemeUtils.setActionBarColor(getWindow(), getSupportActionBar(), titleColor, actionBarItemsColor);
|
||||
}
|
||||
}
|
||||
|
||||
private void setupTintStatusBar() {
|
||||
|
@ -121,8 +128,5 @@ public class BaseDialogWhenLargeActivity extends BaseAppCompatActivity {
|
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
getWindow().addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
}
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_MODE_OVERLAY);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,6 +94,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
|
||||
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DraftsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.ViewStatusDialogFragment;
|
||||
import org.mariotaku.twidere.model.DraftItem;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
|
@ -347,7 +348,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
|
|||
final Window window = getWindow();
|
||||
final Rect rect = new Rect();
|
||||
window.getDecorView().getWindowVisibleDisplayFrame(rect);
|
||||
final int actionBarHeight = Utils.getActionBarHeight(this);
|
||||
final int actionBarHeight = ThemeUtils.getActionBarHeight(this);
|
||||
final View contentView = window.findViewById(android.R.id.content);
|
||||
final int[] location = new int[2];
|
||||
contentView.getLocationOnScreen(location);
|
||||
|
@ -430,7 +431,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
|
|||
break;
|
||||
}
|
||||
case MENU_DRAFTS: {
|
||||
startActivity(new Intent(INTENT_ACTION_DRAFTS));
|
||||
Utils.openDrafts(this);
|
||||
break;
|
||||
}
|
||||
case MENU_DELETE: {
|
||||
|
@ -784,7 +785,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
|
|||
}
|
||||
builder.setSmallIcon(R.drawable.ic_stat_info);
|
||||
builder.setAutoCancel(true);
|
||||
final Intent draftsIntent = new Intent(this, DraftsActivity.class);
|
||||
final Intent draftsIntent = new Intent(this, DraftsFragment.class);
|
||||
builder.setContentIntent(PendingIntent.getActivity(this, 0, draftsIntent, PendingIntent.FLAG_UPDATE_CURRENT));
|
||||
final Intent serviceIntent = new Intent(this, BackgroundOperationService.class);
|
||||
serviceIntent.setAction(INTENT_ACTION_DISCARD_DRAFT);
|
||||
|
|
|
@ -96,9 +96,9 @@ import org.mariotaku.twidere.util.ReadStateManager;
|
|||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.message.TaskStateChangedEvent;
|
||||
import org.mariotaku.twidere.util.message.UnreadCountUpdatedEvent;
|
||||
import org.mariotaku.twidere.view.ExtendedViewPager;
|
||||
|
@ -208,7 +208,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
final int height = mTabIndicator != null ? mTabIndicator.getHeight() : 0;
|
||||
insets.top = height != 0 ? height : Utils.getActionBarHeight(this);
|
||||
insets.top = height != 0 ? height : ThemeUtils.getActionBarHeight(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -804,7 +804,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
final int actionBarAlpha = isTransparent ? ThemeUtils.getUserThemeBackgroundAlpha(this) : 0xFF;
|
||||
final IHomeActionButton homeActionButton = (IHomeActionButton) mActionsButton;
|
||||
mTabIndicator.setItemContext(ThemeUtils.getActionBarContext(this));
|
||||
ViewUtils.setBackground(mActionBar, ThemeUtils.getActionBarBackground(this, themeResId, themeColor,
|
||||
ViewSupport.setBackground(mActionBar, ThemeUtils.getActionBarBackground(this, themeResId, themeColor,
|
||||
backgroundOption, true));
|
||||
final int statusBarColor;
|
||||
final Resources resources = getResources();
|
||||
|
@ -830,7 +830,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
mTabIndicator.setStripColor(contrastColor);
|
||||
mTabIndicator.setIconColor(contrastColor);
|
||||
mTabIndicator.setLabelColor(contrastColor);
|
||||
ActivityAccessor.setTaskDescription(this, new TaskDescriptionCompat(null, null, themeColor));
|
||||
ActivitySupport.setTaskDescription(this, new TaskDescriptionCompat(null, null, themeColor));
|
||||
}
|
||||
mColorStatusFrameLayout.setDrawColor(true);
|
||||
mColorStatusFrameLayout.setDrawShadow(false);
|
||||
|
@ -838,7 +838,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
mColorStatusFrameLayout.setFactor(1);
|
||||
mTabIndicator.setAlpha(actionBarAlpha / 255f);
|
||||
mActionsButton.setAlpha(actionBarAlpha / 255f);
|
||||
ViewUtils.setBackground(mActionBarOverlay, ThemeUtils.getWindowContentOverlay(this));
|
||||
ViewSupport.setBackground(mActionBarOverlay, ThemeUtils.getWindowContentOverlay(this));
|
||||
}
|
||||
|
||||
private void setupHomeTabs() {
|
||||
|
|
|
@ -29,7 +29,7 @@ import android.support.annotation.NonNull;
|
|||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.app.NavUtils;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
|
@ -37,6 +37,7 @@ import android.view.KeyEvent;
|
|||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager.LayoutParams;
|
||||
|
||||
|
@ -47,14 +48,16 @@ import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCal
|
|||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.fragment.support.SearchFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserFragment;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
import org.mariotaku.twidere.util.MultiSelectEventHandler;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
||||
import org.mariotaku.twidere.view.TintedStatusFrameLayout;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.createFragmentForIntent;
|
||||
|
@ -74,7 +77,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
return getSupportFragmentManager().findFragmentById(R.id.main_content);
|
||||
return getSupportFragmentManager().findFragmentById(R.id.content_fragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -89,13 +92,27 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
|
||||
@Override
|
||||
public void onFitSystemWindows(Rect insets) {
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
if (toolbar != null) {
|
||||
final ViewGroup.LayoutParams toolBarParams = toolbar.getLayoutParams();
|
||||
if (toolBarParams instanceof ViewGroup.MarginLayoutParams) {
|
||||
((ViewGroup.MarginLayoutParams) toolBarParams).topMargin = insets.top;
|
||||
}
|
||||
toolbar.setLayoutParams(toolBarParams);
|
||||
}
|
||||
insets.top += ThemeUtils.getActionBarHeight(this);
|
||||
super.onFitSystemWindows(insets);
|
||||
final Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_content);
|
||||
final Fragment fragment = getCurrentVisibleFragment();
|
||||
if (fragment instanceof IBaseFragment) {
|
||||
((IBaseFragment) fragment).requestFitSystemWindows();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
return super.getSystemWindowsInsets(insets);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
|
@ -148,12 +165,17 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
final int linkId = matchLinkId(data);
|
||||
requestWindowFeatures(getWindow(), linkId, data);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_content_fragment);
|
||||
setSupportActionBar((Toolbar) findViewById(R.id.tool_bar));
|
||||
ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable());
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
ViewCompat.setElevation(toolbar, ThemeUtils.getSupportActionBarElevation(this));
|
||||
ViewSupport.setOutlineProvider(toolbar, ViewOutlineProviderCompat.BACKGROUND);
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
setActionBarTheme(actionBar, linkId, data);
|
||||
}
|
||||
setContentView(R.layout.activity_content_fragment);
|
||||
mMainContent.setOnFitSystemWindowsListener(this);
|
||||
setStatusBarColor(linkId, data);
|
||||
setTaskInfo(linkId, data);
|
||||
|
@ -162,14 +184,29 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
}
|
||||
}
|
||||
|
||||
private final View.OnLayoutChangeListener mLayoutChangeListener = new View.OnLayoutChangeListener() {
|
||||
|
||||
private final Rect tempInsets = new Rect();
|
||||
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
if (left != oldLeft && top != oldTop && right != oldRight && bottom != oldBottom) {
|
||||
mMainContent.getSystemWindowsInsets(tempInsets);
|
||||
onFitSystemWindows(tempInsets);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
mMultiSelectHandler.dispatchOnStart();
|
||||
mMainContent.addOnLayoutChangeListener(mLayoutChangeListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
mMainContent.removeOnLayoutChangeListener(mLayoutChangeListener);
|
||||
mMultiSelectHandler.dispatchOnStop();
|
||||
super.onStop();
|
||||
}
|
||||
|
@ -178,14 +215,13 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
final boolean result = super.onPrepareOptionsMenu(menu);
|
||||
if (!shouldSetActionItemColor()) return result;
|
||||
final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
if (toolbar != null) {
|
||||
final int themeColor = getCurrentThemeColor();
|
||||
final int themeId = getCurrentThemeResourceId();
|
||||
final int itemColor = ThemeUtils.getContrastActionBarItemColor(this, themeId, themeColor);
|
||||
final Toolbar toolbar = (Toolbar) actionBarView;
|
||||
ThemeUtils.setActionBarOverflowColor(toolbar, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewUtils.findViewByType(actionBarView, ActionMenuView.class), itemColor, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewSupport.findViewByType(toolbar, ActionMenuView.class), itemColor, itemColor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -198,14 +234,12 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
|
||||
@Override
|
||||
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
final boolean result = super.onPrepareOptionsPanel(view, menu);
|
||||
if (mActionBarItemsColor != 0) {
|
||||
final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
((Toolbar) actionBarView).setTitleTextColor(mActionBarItemsColor);
|
||||
((Toolbar) actionBarView).setSubtitleTextColor(mActionBarItemsColor);
|
||||
ThemeUtils.setActionBarOverflowColor((Toolbar) actionBarView, mActionBarItemsColor);
|
||||
}
|
||||
if (mActionBarItemsColor != 0 && toolbar != null) {
|
||||
toolbar.setTitleTextColor(mActionBarItemsColor);
|
||||
toolbar.setSubtitleTextColor(mActionBarItemsColor);
|
||||
ThemeUtils.setActionBarOverflowColor(toolbar, mActionBarItemsColor);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -245,9 +279,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
window.addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
}
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_MODE_OVERLAY);
|
||||
final int transitionRes;
|
||||
switch (linkId) {
|
||||
case LINK_ID_USER: {
|
||||
|
@ -276,12 +307,9 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
final String option = getThemeBackgroundOption();
|
||||
int actionBarItemsColor = ThemeUtils.getContrastActionBarItemColor(this, themeId, themeColor);
|
||||
switch (linkId) {
|
||||
// case LINK_ID_USER: {
|
||||
// actionBarItemsColor = Color.WHITE;
|
||||
// break;
|
||||
// }
|
||||
case LINK_ID_SEARCH:
|
||||
case LINK_ID_USER_LISTS: {
|
||||
case LINK_ID_USER_LISTS:
|
||||
case LINK_ID_FILTERS: {
|
||||
ThemeUtils.applyActionBarBackground(actionBar, this, themeId, themeColor, option, false);
|
||||
ThemeUtils.applyActionBarBackground(getActionBar(), this, themeId, themeColor, option, true);
|
||||
break;
|
||||
|
@ -328,7 +356,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
// }
|
||||
default: {
|
||||
if (ThemeUtils.isColoredActionBar(getCurrentThemeResourceId())) {
|
||||
ActivityAccessor.setTaskDescription(this, new TaskDescriptionCompat(null, null,
|
||||
ActivitySupport.setTaskDescription(this, new TaskDescriptionCompat(null, null,
|
||||
getCurrentThemeColor()));
|
||||
}
|
||||
break;
|
||||
|
@ -443,10 +471,22 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
setSubtitle(uri.getQueryParameter(QUERY_PARAM_QUERY));
|
||||
break;
|
||||
}
|
||||
case LINK_ID_ACCOUNTS: {
|
||||
setTitle(R.string.accounts);
|
||||
break;
|
||||
}
|
||||
case LINK_ID_DRAFTS: {
|
||||
setTitle(R.string.drafts);
|
||||
break;
|
||||
}
|
||||
case LINK_ID_FILTERS: {
|
||||
setTitle(R.string.filters);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mFinishOnly = Boolean.parseBoolean(uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY));
|
||||
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
ft.replace(R.id.main_content, fragment);
|
||||
ft.replace(R.id.content_fragment, fragment);
|
||||
ft.commit();
|
||||
return true;
|
||||
}
|
||||
|
@ -460,23 +500,22 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
|
||||
@Override
|
||||
public void setControlBarOffset(float offset) {
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar == null) return;
|
||||
actionBar.setHideOffset(Math.round((1 - offset) * getControlBarHeight()));
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
if (toolbar == null) return;
|
||||
toolbar.setTranslationY(-Math.round((1 - offset) * getControlBarHeight()));
|
||||
notifyControlBarOffsetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getControlBarOffset() {
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar == null) return 0;
|
||||
return 1f - actionBar.getHideOffset() / (float) getControlBarHeight();
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
return toolbar != null ? 1 + toolbar.getTranslationY() / (float) getControlBarHeight() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getControlBarHeight() {
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
return actionBar != null ? actionBar.getHeight() : 0;
|
||||
final Toolbar toolbar = peekActionBarToolbar();
|
||||
return toolbar != null ? toolbar.getHeight() : 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -39,8 +39,7 @@ import android.support.v4.app.Fragment;
|
|||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
|
@ -121,6 +120,10 @@ public class SignInActivity extends BaseDialogWhenLargeActivity implements Twitt
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getThemeResourceId() {
|
||||
return ThemeUtils.getThemeResource(this);
|
||||
}
|
||||
@Override
|
||||
public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
|
||||
|
||||
|
@ -176,6 +179,8 @@ public class SignInActivity extends BaseDialogWhenLargeActivity implements Twitt
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
|
@ -277,21 +282,14 @@ public class SignInActivity extends BaseDialogWhenLargeActivity implements Twitt
|
|||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
|
||||
super.onCreate(savedInstanceState);
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE);
|
||||
mResolver = getContentResolver();
|
||||
mApplication = TwidereApplication.getInstance(this);
|
||||
setContentView(R.layout.activity_sign_in);
|
||||
final long[] account_ids = getActivatedAccountIds(this);
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(account_ids.length > 0);
|
||||
}
|
||||
|
||||
// setSupportActionBar((Toolbar) findViewById(R.id.tool_bar));
|
||||
if (savedInstanceState != null) {
|
||||
mAPIUrlFormat = savedInstanceState.getString(Accounts.API_URL_FORMAT);
|
||||
mAuthType = savedInstanceState.getInt(Accounts.AUTH_TYPE);
|
||||
|
|
|
@ -19,10 +19,15 @@
|
|||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.app.ThemedAppCompatDelegate;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
|
@ -40,6 +45,7 @@ public abstract class ThemedAppCompatActivity extends AppCompatActivity implemen
|
|||
private String mCurrentThemeFontFamily;
|
||||
|
||||
private AppCompatDelegate mDelegate;
|
||||
private Toolbar mToolbar;
|
||||
|
||||
@Override
|
||||
public String getCurrentThemeFontFamily() {
|
||||
|
@ -98,7 +104,6 @@ public abstract class ThemedAppCompatActivity extends AppCompatActivity implemen
|
|||
StrictModeUtils.detectAllVmPolicy();
|
||||
StrictModeUtils.detectAllThreadPolicy();
|
||||
}
|
||||
setupTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
|
@ -115,16 +120,42 @@ public abstract class ThemedAppCompatActivity extends AppCompatActivity implemen
|
|||
return mDelegate = ThemedAppCompatDelegate.create(this, this);
|
||||
}
|
||||
|
||||
private void setupTheme() {
|
||||
mCurrentThemeResource = getThemeResourceId();
|
||||
@Override
|
||||
public void setTheme(int resid) {
|
||||
super.setTheme(mCurrentThemeResource = getThemeResourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resid, boolean first) {
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
mCurrentThemeFontFamily = getThemeFontFamily();
|
||||
setTheme(mCurrentThemeResource);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource,
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), getDelegate(), resid,
|
||||
mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
super.onApplyThemeResource(theme, resid, first);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSupportActionBar(Toolbar toolbar) {
|
||||
super.setSupportActionBar(toolbar);
|
||||
mToolbar = toolbar;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public final Toolbar peekActionBarToolbar() {
|
||||
return mToolbar;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public final Toolbar getActionBarToolbar() {
|
||||
if (mToolbar != null) return mToolbar;
|
||||
final View actionBarView = getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
return (Toolbar) actionBarView;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.mariotaku.twidere.activity.support;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
|
@ -129,7 +130,6 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
|
|||
StrictModeUtils.detectAllVmPolicy();
|
||||
StrictModeUtils.detectAllThreadPolicy();
|
||||
}
|
||||
setTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
|
||||
}
|
||||
|
@ -146,17 +146,22 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
|
|||
super.onTitleChanged(title, color);
|
||||
}
|
||||
|
||||
private void setTheme() {
|
||||
mCurrentThemeResource = getThemeResourceId();
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
mCurrentThemeFontFamily = getThemeFontFamily();
|
||||
setTheme(mCurrentThemeResource);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource, mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
|
||||
@Override
|
||||
public void setTheme(int resid) {
|
||||
super.setTheme(mCurrentThemeResource = getThemeResourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onApplyThemeResource(@NonNull Resources.Theme theme, int resid, boolean first) {
|
||||
mCurrentThemeColor = getThemeColor();
|
||||
mCurrentThemeFontFamily = getThemeFontFamily();
|
||||
mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha();
|
||||
mCurrentThemeBackgroundOption = getThemeBackgroundOption();
|
||||
mProfileImageStyle = Utils.getProfileImageStyle(this);
|
||||
ThemeUtils.applyWindowBackground(this, getWindow(), mCurrentThemeResource, mCurrentThemeBackgroundOption, mCurrentThemeBackgroundAlpha);
|
||||
super.onApplyThemeResource(theme, resid, first);
|
||||
}
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
|
|
|
@ -21,17 +21,11 @@ package org.mariotaku.twidere.fragment.support;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
|
||||
import android.support.v7.widget.FixedLinearLayoutManager;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.RecyclerView.OnScrollListener;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -41,23 +35,19 @@ import com.squareup.otto.Bus;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter;
|
||||
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter.ActivityAdapterListener;
|
||||
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.SimpleDrawerCallback;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.HeaderDrawerLayout.DrawerCallback;
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/5.
|
||||
*/
|
||||
public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment implements LoaderCallbacks<Data>,
|
||||
OnRefreshListener, DrawerCallback, RefreshScrollTopInterface, ActivityAdapterListener {
|
||||
|
||||
public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerViewFragment<AbsActivitiesAdapter<Data>>
|
||||
implements LoaderCallbacks<Data>, OnRefreshListener, DrawerCallback, RefreshScrollTopInterface,
|
||||
ActivityAdapterListener {
|
||||
|
||||
private final Object mStatusesBusCallback;
|
||||
|
||||
|
@ -65,80 +55,17 @@ public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment im
|
|||
mStatusesBusCallback = createMessageBusCallback();
|
||||
}
|
||||
|
||||
private View mContentView;
|
||||
private SharedPreferences mPreferences;
|
||||
private View mProgressContainer;
|
||||
private SwipeRefreshLayout mSwipeRefreshLayout;
|
||||
private RecyclerView mRecyclerView;
|
||||
private AbsActivitiesAdapter<Data> mAdapter;
|
||||
private SimpleDrawerCallback mDrawerCallback;
|
||||
private final OnScrollListener mOnScrollListener = new OnScrollListener() {
|
||||
|
||||
private int mScrollState;
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
mScrollState = newState;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
||||
if (isRefreshing()) return;
|
||||
if (mAdapter.isLoadMoreIndicatorVisible() && mScrollState != RecyclerView.SCROLL_STATE_IDLE
|
||||
&& layoutManager.findLastVisibleItemPosition() == mAdapter.getItemCount() - 1) {
|
||||
onLoadMoreStatuses();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean canScroll(float dy) {
|
||||
return mDrawerCallback.canScroll(dy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelTouch() {
|
||||
mDrawerCallback.cancelTouch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fling(float velocity) {
|
||||
mDrawerCallback.fling(velocity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isScrollContent(float x, float y) {
|
||||
return mDrawerCallback.isScrollContent(x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGapClick(GapViewHolder holder, int position) {
|
||||
final ParcelableActivity activity = mAdapter.getActivity(position);
|
||||
final ParcelableActivity activity = getAdapter().getActivity(position);
|
||||
final long[] accountIds = {activity.account_id};
|
||||
final long[] maxIds = {activity.min_position};
|
||||
getActivities(accountIds, maxIds, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrollBy(float dy) {
|
||||
mDrawerCallback.scrollBy(dy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldLayoutHeaderBottom() {
|
||||
return mDrawerCallback.shouldLayoutHeaderBottom();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void topChanged(int offset) {
|
||||
mDrawerCallback.topChanged(offset);
|
||||
}
|
||||
|
||||
public AbsActivitiesAdapter<Data> getAdapter() {
|
||||
return mAdapter;
|
||||
}
|
||||
|
||||
public SharedPreferences getSharedPreferences() {
|
||||
if (mPreferences != null) return mPreferences;
|
||||
|
@ -147,14 +74,6 @@ public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment im
|
|||
|
||||
public abstract int getActivities(long[] accountIds, long[] maxIds, long[] sinceIds);
|
||||
|
||||
public boolean isRefreshing() {
|
||||
return mSwipeRefreshLayout.isRefreshing();
|
||||
}
|
||||
|
||||
public void setRefreshing(boolean refreshing) {
|
||||
mSwipeRefreshLayout.setRefreshing(refreshing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_content_recyclerview, container, false);
|
||||
|
@ -165,24 +84,9 @@ public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment im
|
|||
super.onActivityCreated(savedInstanceState);
|
||||
final View view = getView();
|
||||
if (view == null) throw new AssertionError();
|
||||
final Context context = view.getContext();
|
||||
final boolean compact = Utils.isCompactCards(context);
|
||||
mDrawerCallback = new SimpleDrawerCallback(mRecyclerView);
|
||||
mSwipeRefreshLayout.setOnRefreshListener(this);
|
||||
mSwipeRefreshLayout.setColorSchemeColors(ThemeUtils.getUserAccentColor(context));
|
||||
mAdapter = onCreateAdapter(context, compact);
|
||||
mAdapter.setLoadMoreIndicatorVisible(true);
|
||||
mAdapter.setListener(this);
|
||||
final LinearLayoutManager layoutManager = new FixedLinearLayoutManager(context);
|
||||
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
||||
mRecyclerView.setLayoutManager(layoutManager);
|
||||
if (compact) {
|
||||
mRecyclerView.addItemDecoration(new DividerItemDecoration(context, layoutManager.getOrientation()));
|
||||
}
|
||||
mRecyclerView.setAdapter(mAdapter);
|
||||
mRecyclerView.setOnScrollListener(mOnScrollListener);
|
||||
getAdapter().setListener(this);
|
||||
getLoaderManager().initLoader(0, getArguments(), this);
|
||||
setListShown(false);
|
||||
showProgress();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -202,8 +106,8 @@ public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment im
|
|||
@Override
|
||||
public void onLoadFinished(Loader<Data> loader, Data data) {
|
||||
setRefreshing(false);
|
||||
mAdapter.setData(data);
|
||||
setListShown(true);
|
||||
getAdapter().setData(data);
|
||||
showContent();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -216,56 +120,33 @@ public abstract class AbsActivitiesFragment<Data> extends BaseSupportFragment im
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onBaseViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mContentView = view.findViewById(R.id.fragment_content);
|
||||
mProgressContainer = view.findViewById(R.id.progress_container);
|
||||
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_layout);
|
||||
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
super.fitSystemWindows(insets);
|
||||
mContentView.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final int tabPosition = getTabPosition();
|
||||
if (twitter != null && tabPosition != -1) {
|
||||
twitter.clearUnreadCountAsync(tabPosition);
|
||||
final boolean result = super.scrollToStart();
|
||||
if (result) {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final int tabPosition = getTabPosition();
|
||||
if (twitter != null && tabPosition != -1) {
|
||||
twitter.clearUnreadCountAsync(tabPosition);
|
||||
}
|
||||
}
|
||||
mRecyclerView.smoothScrollToPosition(0);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract long[] getAccountIds();
|
||||
|
||||
protected Data getAdapterData() {
|
||||
return mAdapter.getData();
|
||||
return getAdapter().getData();
|
||||
}
|
||||
|
||||
protected void setAdapterData(Data data) {
|
||||
mAdapter.setData(data);
|
||||
getAdapter().setData(data);
|
||||
}
|
||||
|
||||
protected Object createMessageBusCallback() {
|
||||
return new StatusesBusCallback();
|
||||
}
|
||||
|
||||
protected abstract AbsActivitiesAdapter<Data> onCreateAdapter(Context context, boolean compact);
|
||||
|
||||
protected abstract void onLoadMoreStatuses();
|
||||
|
||||
private void setListShown(boolean shown) {
|
||||
mProgressContainer.setVisibility(shown ? View.GONE : View.VISIBLE);
|
||||
mSwipeRefreshLayout.setVisibility(shown ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
|
||||
protected final class StatusesBusCallback {
|
||||
|
||||
protected StatusesBusCallback() {
|
||||
|
|
|
@ -79,15 +79,11 @@ import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
|
|||
|
||||
import org.mariotaku.querybuilder.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.FiltersActivity;
|
||||
import org.mariotaku.twidere.activity.SettingsActivity;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
import org.mariotaku.twidere.activity.support.AccountsManagerActivity;
|
||||
import org.mariotaku.twidere.activity.support.ComposeActivity;
|
||||
import org.mariotaku.twidere.activity.support.DraftsActivity;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.support.QuickSearchBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserProfileEditorActivity;
|
||||
import org.mariotaku.twidere.adapter.ArrayAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
|
||||
|
@ -305,7 +301,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
final Bundle bundle = new Bundle();
|
||||
bundle.putLong(EXTRA_ACCOUNT_ID, account.account_id);
|
||||
final Intent intent = new Intent(INTENT_ACTION_EDIT_USER_PROFILE);
|
||||
intent.setClass(getActivity(), UserProfileEditorActivity.class);
|
||||
intent.setClass(getActivity(), UserProfileEditorFragment.class);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
break;
|
||||
|
@ -316,20 +312,15 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
final OptionItem option = (OptionItem) item;
|
||||
switch (option.id) {
|
||||
case MENU_ACCOUNTS: {
|
||||
final Intent intent = new Intent(getActivity(), AccountsManagerActivity.class);
|
||||
startActivity(intent);
|
||||
Utils.openAccountsManager(getActivity());
|
||||
break;
|
||||
}
|
||||
case MENU_DRAFTS: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_DRAFTS);
|
||||
intent.setClass(getActivity(), DraftsActivity.class);
|
||||
startActivity(intent);
|
||||
Utils.openDrafts(getActivity());
|
||||
break;
|
||||
}
|
||||
case MENU_FILTERS: {
|
||||
final Intent intent = new Intent(getActivity(), FiltersActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
startActivity(intent);
|
||||
Utils.openFilters(getActivity());
|
||||
break;
|
||||
}
|
||||
case MENU_SETTINGS: {
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.content.SharedPreferences;
|
|||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -75,6 +76,13 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
mProgressContainer.setVisibility(shown ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
final View view = getView();
|
||||
if (view != null) {
|
||||
view.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
|
@ -29,24 +29,27 @@ import android.content.DialogInterface.OnClickListener;
|
|||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.util.Log;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.ActionMode;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AbsListView.MultiChoiceModeListener;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
|
@ -57,10 +60,9 @@ import android.widget.TextView;
|
|||
import org.mariotaku.querybuilder.Columns.Column;
|
||||
import org.mariotaku.querybuilder.Expression;
|
||||
import org.mariotaku.querybuilder.RawItemArray;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.DraftsAdapter;
|
||||
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.SupportProgressDialogFragment;
|
||||
import org.mariotaku.twidere.model.DraftItem;
|
||||
import org.mariotaku.twidere.model.ParcelableMediaUpdate;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
|
||||
|
@ -75,8 +77,8 @@ import java.util.List;
|
|||
|
||||
import static org.mariotaku.twidere.util.Utils.getDefaultTextSize;
|
||||
|
||||
public class DraftsActivity extends BaseDialogWhenLargeActivity implements LoaderCallbacks<Cursor>, OnItemClickListener,
|
||||
MultiChoiceModeListener {
|
||||
public class DraftsFragment extends BaseSupportFragment implements Constants, LoaderCallbacks<Cursor>,
|
||||
OnItemClickListener, MultiChoiceModeListener {
|
||||
|
||||
private ContentResolver mResolver;
|
||||
private SharedPreferences mPreferences;
|
||||
|
@ -93,7 +95,7 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
|
||||
@Override
|
||||
public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.action_multi_select_drafts, menu);
|
||||
mode.getMenuInflater().inflate(R.menu.action_multi_select_drafts, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -111,7 +113,7 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
final Bundle args = new Bundle();
|
||||
args.putLongArray(EXTRA_IDS, mListView.getCheckedItemIds());
|
||||
f.setArguments(args);
|
||||
f.show(getSupportFragmentManager(), "delete_drafts_confirm");
|
||||
f.show(getChildFragmentManager(), "delete_drafts_confirm");
|
||||
break;
|
||||
}
|
||||
case MENU_SEND: {
|
||||
|
@ -150,7 +152,7 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
final Uri uri = Drafts.CONTENT_URI_UNSENT;
|
||||
final String[] cols = Drafts.COLUMNS;
|
||||
final String orderBy = Drafts.TIMESTAMP + " DESC";
|
||||
return new CursorLoader(this, uri, cols, null, null, orderBy);
|
||||
return new CursorLoader(getActivity(), uri, cols, null, null, orderBy);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -180,31 +182,19 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_HOME: {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_drafts, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mResolver = getContentResolver();
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, getDefaultTextSize(this));
|
||||
|
||||
setContentView(R.layout.activity_drafts);
|
||||
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
mAdapter = new DraftsAdapter(this);
|
||||
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, getDefaultTextSize(getActivity()));
|
||||
mAdapter = new DraftsAdapter(getActivity());
|
||||
mListView.setAdapter(mAdapter);
|
||||
mListView.setEmptyView(mEmptyView);
|
||||
mListView.setOnItemClickListener(this);
|
||||
|
@ -212,12 +202,12 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
mListView.setMultiChoiceModeListener(this);
|
||||
mEmptyIcon.setImageResource(R.drawable.ic_info_drafts);
|
||||
mEmptyText.setText(R.string.drafts_hint_messages);
|
||||
getSupportLoaderManager().initLoader(0, null, this);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
setListShown(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
public void onStart() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
twitter.clearNotificationAsync(NOTIFICATION_ID_DRAFTS);
|
||||
|
@ -226,9 +216,9 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
final float text_size = mPreferences.getInt(KEY_TEXT_SIZE, getDefaultTextSize(this));
|
||||
final float text_size = mPreferences.getInt(KEY_TEXT_SIZE, getDefaultTextSize(getActivity()));
|
||||
mAdapter.setTextSize(text_size);
|
||||
if (mTextSize != text_size) {
|
||||
mTextSize = text_size;
|
||||
|
@ -237,19 +227,19 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
mListView = (ListView) findViewById(android.R.id.list);
|
||||
mEmptyView = findViewById(android.R.id.empty);
|
||||
mEmptyText = (TextView) findViewById(R.id.empty_text);
|
||||
mEmptyIcon = (ImageView) findViewById(R.id.empty_icon);
|
||||
mProgressContainer = findViewById(R.id.progress_container);
|
||||
mListContainer = findViewById(R.id.list_container);
|
||||
public void onBaseViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mListView = (ListView) view.findViewById(android.R.id.list);
|
||||
mEmptyView = view.findViewById(android.R.id.empty);
|
||||
mEmptyText = (TextView) view.findViewById(R.id.empty_text);
|
||||
mEmptyIcon = (ImageView) view.findViewById(R.id.empty_icon);
|
||||
mProgressContainer = view.findViewById(R.id.progress_container);
|
||||
mListContainer = view.findViewById(R.id.list_container);
|
||||
}
|
||||
|
||||
public void setListShown(boolean listShown) {
|
||||
|
@ -258,6 +248,14 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
mEmptyView.setVisibility(listShown && mAdapter.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
final View view = getView();
|
||||
if (view != null) {
|
||||
view.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
private void editDraft(final DraftItem draft) {
|
||||
final Intent intent = new Intent(INTENT_ACTION_EDIT_DRAFT);
|
||||
final Bundle bundle = new Bundle();
|
||||
|
@ -272,7 +270,7 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
if (twitter == null) return false;
|
||||
for (final DraftItem item : list) {
|
||||
if (item.action_type == Drafts.ACTION_UPDATE_STATUS || item.action_type <= 0) {
|
||||
twitter.updateStatusesAsync(new ParcelableStatusUpdate(this, item));
|
||||
twitter.updateStatusesAsync(new ParcelableStatusUpdate(getActivity(), item));
|
||||
} else if (item.action_type == Drafts.ACTION_SEND_DIRECT_MESSAGE) {
|
||||
final long recipientId = item.action_extras.optLong(EXTRA_RECIPIENT_ID);
|
||||
if (item.account_ids == null || item.account_ids.length <= 0 || recipientId <= 0) {
|
||||
|
@ -329,7 +327,7 @@ public class DraftsActivity extends BaseDialogWhenLargeActivity implements Loade
|
|||
|
||||
private DeleteDraftsTask(final FragmentActivity activity, final long[] ids) {
|
||||
mActivity = activity;
|
||||
mNotificationManager = (NotificationManager) activity.getSystemService(NOTIFICATION_SERVICE);
|
||||
mNotificationManager = (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mIds = ids;
|
||||
mHandler = new Handler(activity.getMainLooper());
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredKeywordsFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredLinksFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredSourcesFragment;
|
||||
import org.mariotaku.twidere.fragment.BaseFiltersFragment.FilteredUsersFragment;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.fragment.support.BaseSupportFragment;
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.TabPagerIndicator;
|
||||
|
||||
public class FiltersFragment extends BaseSupportFragment implements RefreshScrollTopInterface,
|
||||
SupportFragmentCallback, IBaseFragment.SystemWindowsInsetsCallback {
|
||||
|
||||
private TabPagerIndicator mPagerIndicator;
|
||||
private ViewPager mViewPager;
|
||||
|
||||
private SupportTabsAdapter mPagerAdapter;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_content_pages, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
final FragmentActivity activity = getActivity();
|
||||
mPagerAdapter = new SupportTabsAdapter(activity, getChildFragmentManager(), null, 1);
|
||||
mViewPager.setAdapter(mPagerAdapter);
|
||||
mViewPager.setOffscreenPageLimit(2);
|
||||
mPagerIndicator.setViewPager(mViewPager);
|
||||
mPagerIndicator.setTabDisplayOption(TabPagerIndicator.LABEL);
|
||||
|
||||
|
||||
mPagerAdapter.addTab(FilteredUsersFragment.class, null, getString(R.string.users), null, 0, null);
|
||||
mPagerAdapter.addTab(FilteredKeywordsFragment.class, null, getString(R.string.keywords), null, 1, null);
|
||||
mPagerAdapter.addTab(FilteredSourcesFragment.class, null, getString(R.string.sources), null, 2, null);
|
||||
mPagerAdapter.addTab(FilteredLinksFragment.class, null, getString(R.string.links), null, 3, null);
|
||||
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setCompatContentViewOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setWindowOverlayViewOverlay(activity, new EmptyDrawable());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBaseViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
|
||||
mPagerIndicator = (TabPagerIndicator) view.findViewById(R.id.view_pager_tabs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
final Fragment fragment = getCurrentVisibleFragment();
|
||||
if (!(fragment instanceof RefreshScrollTopInterface)) return false;
|
||||
((RefreshScrollTopInterface) fragment).scrollToStart();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
final int currentItem = mViewPager.getCurrentItem();
|
||||
if (currentItem < 0 || currentItem >= mPagerAdapter.getCount()) return null;
|
||||
return (Fragment) mPagerAdapter.instantiateItem(mViewPager, currentItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
super.fitSystemWindows(insets);
|
||||
final View view = getView();
|
||||
if (view == null) {
|
||||
return;
|
||||
}
|
||||
view.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSystemWindowsInsets(Rect insets) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh(int position) {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@ package org.mariotaku.twidere.fragment.support;
|
|||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
|
@ -61,17 +62,7 @@ public abstract class ParcelableActivitiesFragment extends AbsActivitiesFragment
|
|||
}
|
||||
|
||||
@Override
|
||||
protected long[] getAccountIds() {
|
||||
return new long[]{getAccountId()};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ParcelableActivitiesAdapter onCreateAdapter(final Context context, final boolean compact) {
|
||||
return new ParcelableActivitiesAdapter(context,compact);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLoadMoreStatuses() {
|
||||
public void onLoadMoreContents() {
|
||||
final IActivitiesAdapter<List<ParcelableActivity>> adapter = getAdapter();
|
||||
final long[] maxIds = new long[]{adapter.getActivity(adapter.getActivityCount() - 1).min_position};
|
||||
getActivities(getAccountIds(), maxIds, null);
|
||||
|
@ -91,6 +82,22 @@ public abstract class ParcelableActivitiesFragment extends AbsActivitiesFragment
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRefreshing() {
|
||||
return getLoaderManager().hasRunningLoaders();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected long[] getAccountIds() {
|
||||
return new long[]{getAccountId()};
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected ParcelableActivitiesAdapter onCreateAdapter(final Context context, final boolean compact) {
|
||||
return new ParcelableActivitiesAdapter(context, compact);
|
||||
}
|
||||
|
||||
protected long getAccountId() {
|
||||
final Bundle args = getArguments();
|
||||
return args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
|
||||
|
|
|
@ -150,7 +150,7 @@ public class QuickMenuFragment extends BaseSupportFragment implements OnFitSyste
|
|||
public Context getThemedContext() {
|
||||
if (mThemedContext != null) return mThemedContext;
|
||||
final Context context = getActivity();
|
||||
final int currentThemeResource = ThemeUtils.getThemeResource(context);
|
||||
final int currentThemeResource = ThemeUtils.getNoActionBarThemeResource(context);
|
||||
final int themeResource = ThemeUtils.getDrawerThemeResource(currentThemeResource);
|
||||
return mThemedContext = new ContextThemeWrapper(context, themeResource);
|
||||
}
|
||||
|
|
|
@ -167,6 +167,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setCompatContentViewOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setWindowOverlayViewOverlay(activity, new EmptyDrawable());
|
||||
if (savedInstanceState == null && args != null && args.containsKey(EXTRA_QUERY)) {
|
||||
final String query = args.getString(EXTRA_QUERY);
|
||||
final SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(),
|
||||
|
@ -298,7 +299,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
controlBarHeight = mControlBarHeight;
|
||||
}
|
||||
if (controlBarHeight == 0) {
|
||||
return Utils.getActionBarHeight(activity);
|
||||
return ThemeUtils.getActionBarHeight(activity);
|
||||
}
|
||||
return controlBarHeight;
|
||||
}
|
||||
|
|
|
@ -567,7 +567,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final ParcelableStatus status = data.getData();
|
||||
final Bundle dataExtra = data.getExtras();
|
||||
final ParcelableCredentials credentials = dataExtra.getParcelable(EXTRA_ACCOUNT);
|
||||
if (mStatusAdapter.setStatus(credentials, status)) {
|
||||
if (mStatusAdapter.setStatus(status, credentials)) {
|
||||
mLayoutManager.scrollToPositionWithOffset(1, 0);
|
||||
mStatusAdapter.setConversation(null);
|
||||
mStatusAdapter.setReplies(null);
|
||||
|
@ -1543,7 +1543,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
updateItemDecoration();
|
||||
}
|
||||
|
||||
public boolean setStatus(ParcelableCredentials credentials, ParcelableStatus status) {
|
||||
public boolean setStatus(final ParcelableStatus status, final ParcelableCredentials credentials) {
|
||||
final ParcelableStatus old = mStatus;
|
||||
mStatus = status;
|
||||
mStatusAccount = credentials;
|
||||
|
|
|
@ -91,7 +91,6 @@ import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
|||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.activity.support.ThemedAppCompatActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.activity.support.UserProfileEditorActivity;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
|
||||
|
@ -125,13 +124,13 @@ import org.mariotaku.twidere.util.TwidereLinkify;
|
|||
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener;
|
||||
import org.mariotaku.twidere.util.UserColorNameManager;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor;
|
||||
import org.mariotaku.twidere.util.accessor.ActivityAccessor.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.menu.TwidereMenuInfo;
|
||||
import org.mariotaku.twidere.util.message.FriendshipUpdatedEvent;
|
||||
import org.mariotaku.twidere.util.message.ProfileUpdatedEvent;
|
||||
import org.mariotaku.twidere.util.message.TaskStateChangedEvent;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport;
|
||||
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.ColorLabelRelativeLayout;
|
||||
import org.mariotaku.twidere.view.HeaderDrawerLayout;
|
||||
import org.mariotaku.twidere.view.HeaderDrawerLayout.DrawerCallback;
|
||||
|
@ -1135,15 +1134,10 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
super.fitSystemWindows(insets);
|
||||
final ThemedAppCompatActivity activity = (ThemedAppCompatActivity) getActivity();
|
||||
mHeaderDrawerLayout.setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
final FragmentActivity activity = getActivity();
|
||||
final boolean isTransparentBackground;
|
||||
if (activity instanceof IThemedActivity) {
|
||||
final String backgroundOption = ((IThemedActivity) activity).getCurrentThemeBackgroundOption();
|
||||
isTransparentBackground = ThemeUtils.isTransparentBackground(backgroundOption);
|
||||
} else {
|
||||
isTransparentBackground = ThemeUtils.isTransparentBackground(getActivity());
|
||||
}
|
||||
final String backgroundOption = activity.getCurrentThemeBackgroundOption();
|
||||
final boolean isTransparentBackground = ThemeUtils.isTransparentBackground(backgroundOption);
|
||||
mHeaderDrawerLayout.setClipToPadding(isTransparentBackground);
|
||||
}
|
||||
|
||||
|
@ -1159,12 +1153,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
}
|
||||
case R.id.follow: {
|
||||
if (user.id == user.account_id) {
|
||||
final Bundle extras = new Bundle();
|
||||
extras.putLong(EXTRA_ACCOUNT_ID, user.account_id);
|
||||
final Intent intent = new Intent(INTENT_ACTION_EDIT_USER_PROFILE);
|
||||
intent.setClass(getActivity(), UserProfileEditorActivity.class);
|
||||
intent.putExtras(extras);
|
||||
startActivity(intent);
|
||||
Utils.openProfileEditor(getActivity(), user.account_id);
|
||||
break;
|
||||
}
|
||||
final Relationship relationship = mRelationship;
|
||||
|
@ -1210,7 +1199,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
}
|
||||
case R.id.name_container: {
|
||||
if (user.account_id != user.id) return;
|
||||
startActivity(new Intent(getActivity(), UserProfileEditorActivity.class));
|
||||
Utils.openProfileEditor(getActivity(), user.account_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1331,6 +1320,11 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
|
||||
private static void setCompatToolbarOverlayAlpha(FragmentActivity activity, float alpha) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return;
|
||||
final View windowOverlay = activity.findViewById(R.id.window_overlay);
|
||||
if (windowOverlay != null) {
|
||||
windowOverlay.setAlpha(alpha);
|
||||
return;
|
||||
}
|
||||
final Drawable drawable = ThemeUtils.getCompatToolbarOverlay(activity);
|
||||
if (drawable == null) return;
|
||||
drawable.setAlpha(Math.round(alpha * 255));
|
||||
|
@ -1356,12 +1350,12 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
if (mActionBarBackground != null) {
|
||||
mActionBarBackground.setColor(actionBarColor);
|
||||
}
|
||||
ActivityAccessor.setTaskDescription(activity, new TaskDescriptionCompat(null, null, actionBarColor));
|
||||
ActivitySupport.setTaskDescription(activity, new TaskDescriptionCompat(null, null, actionBarColor));
|
||||
mDescriptionView.setLinkTextColor(color);
|
||||
mProfileBannerView.setBackgroundColor(color);
|
||||
mLocationView.setLinkTextColor(color);
|
||||
mURLView.setLinkTextColor(color);
|
||||
ViewUtils.setBackground(mPagerIndicator, ThemeUtils.getActionBarStackedBackground(activity, themeRes, color, true));
|
||||
ViewSupport.setBackground(mPagerIndicator, ThemeUtils.getActionBarStackedBackground(activity, themeRes, color, true));
|
||||
|
||||
final HeaderDrawerLayout drawer = mHeaderDrawerLayout;
|
||||
if (drawer != null) {
|
||||
|
@ -1502,13 +1496,13 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
if (mActionBarHomeAsUpIndicator != null) {
|
||||
mActionBarHomeAsUpIndicator.setColorFilter(itemColor, Mode.SRC_ATOP);
|
||||
}
|
||||
final View actionBarView = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
final Toolbar toolbar = (Toolbar) actionBarView;
|
||||
final Toolbar actionBarView = activity.getActionBarToolbar();
|
||||
if (actionBarView != null) {
|
||||
final Toolbar toolbar = actionBarView;
|
||||
toolbar.setTitleTextColor(itemColor);
|
||||
toolbar.setSubtitleTextColor(itemColor);
|
||||
ThemeUtils.setActionBarOverflowColor(toolbar, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewUtils.findViewByType(actionBarView, ActionMenuView.class), itemColor, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(ViewSupport.findViewByType(actionBarView, ActionMenuView.class), itemColor, itemColor);
|
||||
}
|
||||
mPagerIndicator.updateAppearance();
|
||||
}
|
||||
|
@ -1521,15 +1515,14 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final float nameShowingRatio = (mHeaderDrawerLayout.getPaddingTop() - location[1])
|
||||
/ (float) mNameView.getHeight();
|
||||
final float textAlpha = MathUtils.clamp(nameShowingRatio, 0, 1);
|
||||
final FragmentActivity activity = getActivity();
|
||||
final View actionBarView = activity.getWindow().findViewById(android.support.v7.appcompat.R.id.action_bar);
|
||||
if (actionBarView instanceof Toolbar) {
|
||||
final Toolbar toolbar = (Toolbar) actionBarView;
|
||||
final TextView titleView = ViewUtils.findViewByText(toolbar, toolbar.getTitle());
|
||||
final ThemedAppCompatActivity activity = (ThemedAppCompatActivity) getActivity();
|
||||
final Toolbar actionBarView = activity.getActionBarToolbar();
|
||||
if (actionBarView != null) {
|
||||
final TextView titleView = ViewSupport.findViewByText(actionBarView, actionBarView.getTitle());
|
||||
if (titleView != null) {
|
||||
titleView.setAlpha(textAlpha);
|
||||
}
|
||||
final TextView subtitleView = ViewUtils.findViewByText(toolbar, toolbar.getSubtitle());
|
||||
final TextView subtitleView = ViewSupport.findViewByText(actionBarView, actionBarView.getSubtitle());
|
||||
if (subtitleView != null) {
|
||||
subtitleView.setAlpha(textAlpha);
|
||||
}
|
||||
|
|
|
@ -45,31 +45,24 @@ public class UserListsFragment extends BaseSupportFragment implements RefreshScr
|
|||
private SupportTabsAdapter mPagerAdapter;
|
||||
private TabPagerIndicator mPagerIndicator;
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
final int currentItem = mViewPager.getCurrentItem();
|
||||
if (currentItem < 0 || currentItem >= mPagerAdapter.getCount()) return null;
|
||||
return (Fragment) mPagerAdapter.instantiateItem(mViewPager, currentItem);
|
||||
}
|
||||
|
||||
public void hideIndicator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
final Bundle args = getArguments();
|
||||
final FragmentActivity activity = getActivity();
|
||||
mPagerAdapter = new SupportTabsAdapter(activity, getChildFragmentManager(), null, 1);
|
||||
mPagerAdapter.addTab(UserListsListFragment.class, args, getString(R.string.follows), null, 0, null);
|
||||
mPagerAdapter.addTab(UserListMembershipsListFragment.class, args, getString(R.string.belongs_to), 0, 1, null);
|
||||
mViewPager.setAdapter(mPagerAdapter);
|
||||
mViewPager.setOffscreenPageLimit(2);
|
||||
mPagerIndicator.setViewPager(mViewPager);
|
||||
mPagerIndicator.setTabDisplayOption(TabPagerIndicator.LABEL);
|
||||
|
||||
mPagerAdapter.addTab(UserListsListFragment.class, args, getString(R.string.follows), null, 0, null);
|
||||
mPagerAdapter.addTab(UserListMembershipsListFragment.class, args, getString(R.string.belongs_to), 0, 1, null);
|
||||
|
||||
ThemeUtils.initPagerIndicatorAsActionBarTab(activity, mPagerIndicator);
|
||||
ThemeUtils.setCompatToolbarOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setCompatContentViewOverlay(activity, new EmptyDrawable());
|
||||
ThemeUtils.setWindowOverlayViewOverlay(activity, new EmptyDrawable());
|
||||
}
|
||||
|
||||
|
||||
|
@ -93,9 +86,6 @@ public class UserListsFragment extends BaseSupportFragment implements RefreshScr
|
|||
return true;
|
||||
}
|
||||
|
||||
public void showIndicator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh() {
|
||||
final Fragment fragment = getCurrentVisibleFragment();
|
||||
|
@ -104,6 +94,12 @@ public class UserListsFragment extends BaseSupportFragment implements RefreshScr
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
final int currentItem = mViewPager.getCurrentItem();
|
||||
if (currentItem < 0 || currentItem >= mPagerAdapter.getCount()) return null;
|
||||
return (Fragment) mPagerAdapter.instantiateItem(mViewPager, currentItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.activity.support;
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
@ -26,25 +26,30 @@ import android.os.AsyncTask;
|
|||
import android.os.AsyncTask.Status;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.support.ImagePickerActivity;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.support.SupportProgressDialogFragment;
|
||||
import org.mariotaku.twidere.loader.support.ParcelableUserLoader;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
|
@ -55,6 +60,7 @@ import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileImageTask;
|
|||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.TwitterWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.ForegroundColorView;
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener;
|
||||
|
||||
|
@ -64,10 +70,8 @@ import twitter4j.User;
|
|||
|
||||
import static android.text.TextUtils.isEmpty;
|
||||
import static org.mariotaku.twidere.util.Utils.getTwitterInstance;
|
||||
import static org.mariotaku.twidere.util.Utils.isMyAccount;
|
||||
import static org.mariotaku.twidere.util.Utils.showErrorMessage;
|
||||
|
||||
public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity implements OnSizeChangedListener, TextWatcher,
|
||||
public class UserProfileEditorFragment extends BaseSupportFragment implements OnSizeChangedListener, TextWatcher,
|
||||
OnClickListener, LoaderCallbacks<SingleResponse<ParcelableUser>> {
|
||||
|
||||
private static final int LOADER_ID_USER = 1;
|
||||
|
@ -118,19 +122,19 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
break;
|
||||
}
|
||||
case R.id.profile_image_camera: {
|
||||
final Intent intent = new Intent(this, ImagePickerActivity.class);
|
||||
final Intent intent = new Intent(getActivity(), ImagePickerActivity.class);
|
||||
intent.setAction(INTENT_ACTION_PICK_IMAGE);
|
||||
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
|
||||
break;
|
||||
}
|
||||
case R.id.profile_image_gallery: {
|
||||
final Intent intent = new Intent(this, ImagePickerActivity.class);
|
||||
final Intent intent = new Intent(getActivity(), ImagePickerActivity.class);
|
||||
intent.setAction(INTENT_ACTION_TAKE_PHOTO);
|
||||
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
|
||||
break;
|
||||
}
|
||||
case R.id.profile_banner_gallery: {
|
||||
final Intent intent = new Intent(this, ImagePickerActivity.class);
|
||||
final Intent intent = new Intent(getActivity(), ImagePickerActivity.class);
|
||||
intent.setAction(INTENT_ACTION_PICK_IMAGE);
|
||||
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_BANNER_IMAGE);
|
||||
break;
|
||||
|
@ -141,14 +145,14 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
break;
|
||||
}
|
||||
case R.id.set_link_color: {
|
||||
final Intent intent = new Intent(this, ColorPickerDialogActivity.class);
|
||||
final Intent intent = new Intent(getActivity(), ColorPickerDialogActivity.class);
|
||||
intent.putExtra(EXTRA_COLOR, user.link_color);
|
||||
intent.putExtra(EXTRA_ALPHA_SLIDER, false);
|
||||
startActivityForResult(intent, REQUEST_PICK_LINK_COLOR);
|
||||
break;
|
||||
}
|
||||
case R.id.set_background_color: {
|
||||
final Intent intent = new Intent(this, ColorPickerDialogActivity.class);
|
||||
final Intent intent = new Intent(getActivity(), ColorPickerDialogActivity.class);
|
||||
intent.putExtra(EXTRA_COLOR, user.background_color);
|
||||
intent.putExtra(EXTRA_ALPHA_SLIDER, false);
|
||||
startActivityForResult(intent, REQUEST_PICK_BACKGROUND_COLOR);
|
||||
|
@ -161,8 +165,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
public Loader<SingleResponse<ParcelableUser>> onCreateLoader(final int id, final Bundle args) {
|
||||
mProgressContainer.setVisibility(View.VISIBLE);
|
||||
mEditProfileContent.setVisibility(View.GONE);
|
||||
return new ParcelableUserLoader(UserProfileEditorActivity.this, mAccountId, mAccountId, null, getIntent()
|
||||
.getExtras(), false, false);
|
||||
return new ParcelableUserLoader(getActivity(), mAccountId, mAccountId, null, getArguments(), false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -180,18 +183,13 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_profile_editor, menu);
|
||||
return true;
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_profile_editor, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case MENU_HOME: {
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
case MENU_SAVE: {
|
||||
final String name = ParseUtils.parseString(mEditName.getText());
|
||||
final String url = ParseUtils.parseString(mEditUrl.getText());
|
||||
|
@ -209,24 +207,19 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mAsyncTaskManager = TwidereApplication.getInstance(this).getAsyncTaskManager();
|
||||
mLazyImageLoader = TwidereApplication.getInstance(this).getMediaLoaderWrapper();
|
||||
final Intent intent = getIntent();
|
||||
final long accountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1);
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
final TwidereApplication application = TwidereApplication.getInstance(getActivity());
|
||||
mAsyncTaskManager = application.getAsyncTaskManager();
|
||||
mLazyImageLoader = application.getMediaLoaderWrapper();
|
||||
final Bundle args = getArguments();
|
||||
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
|
||||
mAccountId = accountId;
|
||||
if (!isMyAccount(this, accountId)) {
|
||||
finish();
|
||||
if (!Utils.isMyAccount(getActivity(), accountId)) {
|
||||
getActivity().finish();
|
||||
return;
|
||||
}
|
||||
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
setContentView(R.layout.activity_user_profile_editor);
|
||||
|
||||
// setOverrideExitAniamtion(false);
|
||||
mEditName.addTextChangedListener(this);
|
||||
mEditDescription.addTextChangedListener(this);
|
||||
|
@ -254,12 +247,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(final Bundle outState) {
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(EXTRA_USER, mUser);
|
||||
outState.putString(EXTRA_NAME, ParseUtils.parseString(mEditName.getText()));
|
||||
|
@ -268,49 +256,50 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
outState.putString(EXTRA_URL, ParseUtils.parseString(mEditUrl.getText()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSizeChanged(final View view, final int w, final int h, final int oldw, final int oldh) {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
mProgressContainer = findViewById(R.id.progress_container);
|
||||
mEditProfileContent = findViewById(R.id.edit_profile_content);
|
||||
mProfileBannerView = (ImageView) findViewById(R.id.profile_banner);
|
||||
mProfileImageView = (ImageView) findViewById(R.id.profile_image);
|
||||
mEditName = (EditText) findViewById(R.id.name);
|
||||
mEditDescription = (EditText) findViewById(R.id.description);
|
||||
mEditLocation = (EditText) findViewById(R.id.location);
|
||||
mEditUrl = (EditText) findViewById(R.id.url);
|
||||
mProfileImageCamera = findViewById(R.id.profile_image_camera);
|
||||
mProfileImageGallery = findViewById(R.id.profile_image_gallery);
|
||||
mProfileBannerGallery = findViewById(R.id.profile_banner_gallery);
|
||||
mProfileBannerRemove = findViewById(R.id.profile_banner_remove);
|
||||
mLinkColor = (ForegroundColorView) findViewById(R.id.link_color);
|
||||
mBackgroundColor = (ForegroundColorView) findViewById(R.id.background_color);
|
||||
mSetLinkColor = findViewById(R.id.set_link_color);
|
||||
mSetBackgroundColor = findViewById(R.id.set_background_color);
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.activity_user_profile_editor, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
|
||||
if (resultCode == RESULT_CANCELED) return;
|
||||
public void onBaseViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mProgressContainer = view.findViewById(R.id.progress_container);
|
||||
mEditProfileContent = view.findViewById(R.id.edit_profile_content);
|
||||
mProfileBannerView = (ImageView) view.findViewById(R.id.profile_banner);
|
||||
mProfileImageView = (ImageView) view.findViewById(R.id.profile_image);
|
||||
mEditName = (EditText) view.findViewById(R.id.name);
|
||||
mEditDescription = (EditText) view.findViewById(R.id.description);
|
||||
mEditLocation = (EditText) view.findViewById(R.id.location);
|
||||
mEditUrl = (EditText) view.findViewById(R.id.url);
|
||||
mProfileImageCamera = view.findViewById(R.id.profile_image_camera);
|
||||
mProfileImageGallery = view.findViewById(R.id.profile_image_gallery);
|
||||
mProfileBannerGallery = view.findViewById(R.id.profile_banner_gallery);
|
||||
mProfileBannerRemove = view.findViewById(R.id.profile_banner_remove);
|
||||
mLinkColor = (ForegroundColorView) view.findViewById(R.id.link_color);
|
||||
mBackgroundColor = (ForegroundColorView) view.findViewById(R.id.background_color);
|
||||
mSetLinkColor = view.findViewById(R.id.set_link_color);
|
||||
mSetBackgroundColor = view.findViewById(R.id.set_background_color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
|
||||
if (resultCode == FragmentActivity.RESULT_CANCELED) return;
|
||||
switch (requestCode) {
|
||||
case REQUEST_UPLOAD_PROFILE_BANNER_IMAGE: {
|
||||
if (mTask != null && mTask.getStatus() == Status.RUNNING) return;
|
||||
mTask = new UpdateProfileBannerImageTaskInternal(this, mAsyncTaskManager, mAccountId, data.getData(), true);
|
||||
mTask = new UpdateProfileBannerImageTaskInternal(getActivity(), mAsyncTaskManager, mAccountId, data.getData(), true);
|
||||
AsyncTaskUtils.executeTask(mTask);
|
||||
break;
|
||||
}
|
||||
case REQUEST_UPLOAD_PROFILE_IMAGE: {
|
||||
if (mTask != null && mTask.getStatus() == Status.RUNNING) return;
|
||||
mTask = new UpdateProfileImageTaskInternal(this, mAsyncTaskManager, mAccountId, data.getData(), true);
|
||||
mTask = new UpdateProfileImageTaskInternal(getActivity(), mAsyncTaskManager, mAccountId, data.getData(), true);
|
||||
AsyncTaskUtils.executeTask(mTask);
|
||||
break;
|
||||
}
|
||||
|
@ -369,7 +358,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
}
|
||||
|
||||
private void getUserInfo() {
|
||||
final LoaderManager lm = getSupportLoaderManager();
|
||||
final LoaderManager lm = getLoaderManager();
|
||||
lm.destroyLoader(LOADER_ID_USER);
|
||||
mGetUserInfoCalled = true;
|
||||
if (mUserInfoLoaderInitialized) {
|
||||
|
@ -408,7 +397,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
static class UpdateProfileTaskInternal extends AsyncTask<Object, Object, SingleResponse<ParcelableUser>> {
|
||||
|
||||
private static final String DIALOG_FRAGMENT_TAG = "updating_user_profile";
|
||||
private final UserProfileEditorActivity mActivity;
|
||||
private final UserProfileEditorFragment mFragment;
|
||||
private final Handler mHandler;
|
||||
private final long mAccountId;
|
||||
private final ParcelableUser mOriginal;
|
||||
|
@ -418,14 +407,16 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
private final String mDescription;
|
||||
private final int mLinkColor;
|
||||
private final int mBackgroundColor;
|
||||
private final FragmentActivity mActivity;
|
||||
|
||||
public UpdateProfileTaskInternal(final UserProfileEditorActivity activity,
|
||||
public UpdateProfileTaskInternal(final UserProfileEditorFragment fragment,
|
||||
final long accountId, final ParcelableUser original,
|
||||
final String name, final String url, final String location,
|
||||
final String description, final int linkColor,
|
||||
final int backgroundColor) {
|
||||
mActivity = activity;
|
||||
mHandler = new Handler(activity.getMainLooper());
|
||||
mFragment = fragment;
|
||||
mActivity = fragment.getActivity();
|
||||
mHandler = new Handler(mActivity.getMainLooper());
|
||||
mAccountId = accountId;
|
||||
mOriginal = original;
|
||||
mName = name;
|
||||
|
@ -482,7 +473,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
@Override
|
||||
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
|
||||
super.onPostExecute(result);
|
||||
final Fragment f = mActivity.getSupportFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG);
|
||||
final Fragment f = mFragment.getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG);
|
||||
if (f instanceof DialogFragment) {
|
||||
((DialogFragment) f).dismissAllowingStateLoss();
|
||||
}
|
||||
|
@ -493,7 +484,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final DialogFragment df = SupportProgressDialogFragment.show(mActivity, DIALOG_FRAGMENT_TAG);
|
||||
final DialogFragment df = SupportProgressDialogFragment.show(mFragment.getActivity(), DIALOG_FRAGMENT_TAG);
|
||||
df.setCancelable(false);
|
||||
}
|
||||
});
|
||||
|
@ -512,7 +503,7 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
|
||||
@Override
|
||||
protected SingleResponse<Boolean> doInBackground(final Object... params) {
|
||||
return TwitterWrapper.deleteProfileBannerImage(UserProfileEditorActivity.this, account_id);
|
||||
return TwitterWrapper.deleteProfileBannerImage(getActivity(), account_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -520,10 +511,9 @@ public class UserProfileEditorActivity extends BaseDialogWhenLargeActivity imple
|
|||
super.onPostExecute(result);
|
||||
if (result.getData() != null && result.getData()) {
|
||||
getUserInfo();
|
||||
Toast.makeText(UserProfileEditorActivity.this, R.string.profile_banner_image_updated,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getActivity(), R.string.profile_banner_image_updated, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
showErrorMessage(UserProfileEditorActivity.this, R.string.action_removing_profile_banner_image,
|
||||
Utils.showErrorMessage(getActivity(), R.string.action_removing_profile_banner_image,
|
||||
result.getException(), true);
|
||||
}
|
||||
setUpdateState(false);
|
|
@ -55,7 +55,12 @@ public class ParcelableStatusLoader extends AsyncTaskLoader<SingleResponse<Parce
|
|||
public SingleResponse<ParcelableStatus> loadInBackground() {
|
||||
if (!mOmitIntentExtra && mExtras != null) {
|
||||
final ParcelableStatus cache = mExtras.getParcelable(IntentConstants.EXTRA_STATUS);
|
||||
if (cache != null) return SingleResponse.getInstance(cache);
|
||||
if (cache != null) {
|
||||
final SingleResponse<ParcelableStatus> response = SingleResponse.getInstance(cache);
|
||||
final Bundle extras = response.getExtras();
|
||||
extras.putParcelable(EXTRA_ACCOUNT, ParcelableAccount.getCredentials(getContext(), mAccountId));
|
||||
return response;
|
||||
}
|
||||
}
|
||||
try {
|
||||
final ParcelableStatus status = findStatus(getContext(), mAccountId, mStatusId);
|
||||
|
|
|
@ -67,11 +67,11 @@ public class SupportStatusShareProvider extends ActionProvider implements Consta
|
|||
|
||||
@Override
|
||||
public void onPrepareSubMenu(SubMenu subMenu) {
|
||||
final Intent shareIntent = createStatusShareIntent(mContext, mStatus);
|
||||
final ParcelableStatus status = mStatus;
|
||||
if (status == null) return;
|
||||
final Intent shareIntent = createStatusShareIntent(mContext, status);
|
||||
subMenu.removeGroup(MENU_GROUP_STATUS_SHARE);
|
||||
if (mStatus != null) {
|
||||
addIntentToMenu(mContext, subMenu, shareIntent, MENU_GROUP_STATUS_SHARE);
|
||||
}
|
||||
addIntentToMenu(mContext, subMenu, shareIntent, MENU_GROUP_STATUS_SHARE);
|
||||
}
|
||||
|
||||
public void setStatus(ParcelableStatus status) {
|
||||
|
|
|
@ -24,7 +24,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.graphic.AlphaPatternDrawable;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/8.
|
||||
|
@ -165,7 +165,7 @@ public class ThemeBackgroundPreference extends DialogPreference implements Const
|
|||
mAlphaSlider.setOnSeekBarChangeListener(mAlphaSliderChangedListener);
|
||||
mAlphaSlider.setProgress(preferences.getInt(KEY_THEME_BACKGROUND_ALPHA, DEFAULT_THEME_BACKGROUND_ALPHA));
|
||||
final int patternSize = res.getDimensionPixelSize(R.dimen.element_spacing_msmall);
|
||||
ViewUtils.setBackground(mAlphaPreview, new AlphaPatternDrawable(patternSize));
|
||||
ViewSupport.setBackground(mAlphaPreview, new AlphaPatternDrawable(patternSize));
|
||||
updateAlphaVisibility();
|
||||
updateAlphaPreview();
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import android.widget.TextView;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView;
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView.TouchInterceptor;
|
||||
|
||||
|
@ -77,7 +77,7 @@ public class ThemePreviewPreference extends Preference implements Constants, OnS
|
|||
@Override
|
||||
protected View onCreateView(final ViewGroup parent) {
|
||||
final Context context = getContext();
|
||||
final int themeResource = ThemeUtils.getThemeResource(context);
|
||||
final int themeResource = ThemeUtils.getNoActionBarThemeResource(context);
|
||||
final Context theme = new ContextThemeWrapper(context, themeResource);
|
||||
final LayoutInflater inflater = LayoutInflater.from(theme);
|
||||
try {
|
||||
|
@ -108,13 +108,13 @@ public class ThemePreviewPreference extends Preference implements Constants, OnS
|
|||
final int cardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
|
||||
final int accentColor = ThemeUtils.getUserAccentColor(context);
|
||||
|
||||
final int themeId = ThemeUtils.getThemeResource(context);
|
||||
final int themeId = ThemeUtils.getNoActionBarThemeResource(context);
|
||||
final String backgroundOption = ThemeUtils.getThemeBackgroundOption(context);
|
||||
ThemeUtils.applyWindowBackground(context, windowBackgroundView, themeId, backgroundOption,
|
||||
ThemeUtils.getUserThemeBackgroundAlpha(context));
|
||||
ViewUtils.setBackground(actionBarView, ThemeUtils.getActionBarBackground(context, themeRes,
|
||||
ViewSupport.setBackground(actionBarView, ThemeUtils.getActionBarBackground(context, themeRes,
|
||||
accentColor, backgroundOption, true));
|
||||
ViewUtils.setBackground(actionBarOverlay, ThemeUtils.getWindowContentOverlay(context));
|
||||
ViewSupport.setBackground(actionBarOverlay, ThemeUtils.getWindowContentOverlay(context));
|
||||
cardView.setCardBackgroundColor(cardBackgroundColor);
|
||||
|
||||
actionBarView.setTitle(R.string.app_name);
|
||||
|
|
|
@ -43,6 +43,7 @@ import com.nostra13.universalimageloader.utils.IoUtils;
|
|||
import com.twitter.Extractor;
|
||||
|
||||
import org.mariotaku.querybuilder.Expression;
|
||||
import org.mariotaku.twidere.BuildConfig;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.MainActivity;
|
||||
|
@ -382,7 +383,12 @@ public class BackgroundOperationService extends IntentService implements Constan
|
|||
private void displayTweetNotSendNotification() {
|
||||
final String title = getString(R.string.status_not_updated);
|
||||
final String message = getString(R.string.status_not_updated_summary);
|
||||
final Intent intent = new Intent(INTENT_ACTION_DRAFTS);
|
||||
final Intent intent = new Intent();
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_DRAFTS);
|
||||
intent.setData(builder.build());
|
||||
final Notification notification = buildNotification(title, message, R.drawable.ic_stat_twitter, intent, null);
|
||||
mNotificationManager.notify(NOTIFICATION_ID_DRAFTS, notification);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,8 @@ import android.support.annotation.NonNull;
|
|||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.app.AppCompatDelegateTrojan;
|
||||
import android.support.v7.internal.app.WindowDecorActionBar;
|
||||
import android.support.v7.internal.app.WindowDecorActionBar.ActionModeImpl;
|
||||
import android.support.v7.internal.view.SupportActionModeWrapper;
|
||||
|
@ -50,6 +52,7 @@ import android.text.SpannableStringBuilder;
|
|||
import android.text.Spanned;
|
||||
import android.text.TextPaint;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ActionMode;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.ContextThemeWrapper;
|
||||
|
@ -70,6 +73,7 @@ import org.mariotaku.twidere.graphic.ActionBarColorDrawable;
|
|||
import org.mariotaku.twidere.graphic.ActionIconDrawable;
|
||||
import org.mariotaku.twidere.text.ParagraphSpacingSpan;
|
||||
import org.mariotaku.twidere.util.menu.TwidereMenuInfo;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.TabPagerIndicator;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
@ -225,7 +229,7 @@ public class ThemeUtils implements Constants {
|
|||
final TextView actionBarTitleView = (TextView) contextView.findViewById(android.support.v7.appcompat.R.id.action_bar_title);
|
||||
final TextView actionBarSubtitleView = (TextView) contextView.findViewById(android.support.v7.appcompat.R.id.action_bar_subtitle);
|
||||
final ImageView actionModeCloseButton = (ImageView) contextView.findViewById(android.support.v7.appcompat.R.id.action_mode_close_button);
|
||||
final ActionMenuView menuView = ViewUtils.findViewByType(contextView, ActionMenuView.class);
|
||||
final ActionMenuView menuView = ViewSupport.findViewByType(contextView, ActionMenuView.class);
|
||||
final int actionBarColor;
|
||||
if (isDarkTheme(themeRes)) {
|
||||
actionBarColor = context.getResources().getColor(R.color.background_color_action_bar_dark);
|
||||
|
@ -247,7 +251,7 @@ public class ThemeUtils implements Constants {
|
|||
setActionBarOverflowColor(menuView, itemColor);
|
||||
ThemeUtils.wrapToolbarMenuIcon(menuView, itemColor, itemColor);
|
||||
}
|
||||
ViewUtils.setBackground(contextView, getActionBarBackground(activity, themeRes, accentColor, backgroundOption, outlineEnabled));
|
||||
ViewSupport.setBackground(contextView, getActionBarBackground(activity, themeRes, accentColor, backgroundOption, outlineEnabled));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -263,14 +267,28 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void applyWindowBackground(Context context, Window window, AppCompatDelegate delegate, int theme, String option, int alpha) {
|
||||
if (isWindowFloating(delegate)) return;
|
||||
if (VALUE_THEME_BACKGROUND_TRANSPARENT.equals(option)) {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER);
|
||||
window.setBackgroundDrawable(ThemeUtils.getWindowBackgroundApplyAlpha(context, alpha));
|
||||
} else if (VALUE_THEME_BACKGROUND_SOLID.equals(option)) {
|
||||
window.setBackgroundDrawable(new ColorDrawable(isDarkTheme(theme) ? Color.BLACK : Color.WHITE));
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isWindowFloating(AppCompatDelegate delegate) {
|
||||
return AppCompatDelegateTrojan.isFloating(delegate);
|
||||
}
|
||||
|
||||
public static void applyWindowBackground(Context context, View window, int theme, String option, int alpha) {
|
||||
if (isWindowFloating(context, theme)) return;
|
||||
if (VALUE_THEME_BACKGROUND_TRANSPARENT.equals(option)) {
|
||||
ViewUtils.setBackground(window, ThemeUtils.getWindowBackgroundApplyAlpha(context, alpha));
|
||||
ViewSupport.setBackground(window, ThemeUtils.getWindowBackgroundApplyAlpha(context, alpha));
|
||||
} else if (VALUE_THEME_BACKGROUND_SOLID.equals(option)) {
|
||||
ViewUtils.setBackground(window, new ColorDrawable(isDarkTheme(theme) ? Color.BLACK : Color.WHITE));
|
||||
ViewSupport.setBackground(window, new ColorDrawable(isDarkTheme(theme) ? Color.BLACK : Color.WHITE));
|
||||
} else {
|
||||
ViewUtils.setBackground(window, ThemeUtils.getWindowBackground(context));
|
||||
ViewSupport.setBackground(window, ThemeUtils.getWindowBackground(context));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,13 +463,13 @@ public class ThemeUtils implements Constants {
|
|||
|
||||
public static int getDialogWhenLargeThemeResource(final String name) {
|
||||
if (VALUE_THEME_NAME_DARK.equals(name)) {
|
||||
return R.style.Theme_Twidere_Dark_DialogWhenLarge;
|
||||
return R.style.Theme_Twidere_Dark_DialogWhenLarge_NoActionBar;
|
||||
}
|
||||
return R.style.Theme_Twidere_Light_DialogWhenLarge;
|
||||
return R.style.Theme_Twidere_Light_DialogWhenLarge_NoActionBar;
|
||||
}
|
||||
|
||||
public static int getDrawerThemeResource(final Context context) {
|
||||
return getDrawerThemeResource(getThemeResource(context));
|
||||
return getDrawerThemeResource(getNoActionBarThemeResource(context));
|
||||
}
|
||||
|
||||
public static int getDrawerThemeResource(final int themeRes) {
|
||||
|
@ -694,6 +712,18 @@ public class ThemeUtils implements Constants {
|
|||
return R.style.Theme_Twidere_Light;
|
||||
}
|
||||
|
||||
|
||||
public static int getNoActionBarThemeResource(final Context context) {
|
||||
return getNoActionBarThemeResource(getThemeNameOption(context));
|
||||
}
|
||||
|
||||
public static int getNoActionBarThemeResource(final String name) {
|
||||
if (VALUE_THEME_NAME_DARK.equals(name)) {
|
||||
return R.style.Theme_Twidere_Dark_NoActionBar;
|
||||
}
|
||||
return R.style.Theme_Twidere_Light_NoActionBar;
|
||||
}
|
||||
|
||||
public static Context getThemedContext(final Context context) {
|
||||
return context;
|
||||
}
|
||||
|
@ -805,6 +835,16 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static Drawable getWindowContentOverlay(final Context context, int themeRes) {
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
final TypedArray a = context.obtainStyledAttributes(null, new int[]{android.R.attr.windowContentOverlay}, 0, themeRes);
|
||||
try {
|
||||
return a.getDrawable(0);
|
||||
} finally {
|
||||
a.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
public static void initPagerIndicatorAsActionBarTab(FragmentActivity activity, TabPagerIndicator indicator) {
|
||||
final float supportActionBarElevation = getSupportActionBarElevation(activity);
|
||||
ViewCompat.setElevation(indicator, supportActionBarElevation);
|
||||
|
@ -823,7 +863,7 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
final int contrastColor = TwidereColorUtils.getContrastYIQ(themeColor,
|
||||
ACCENT_COLOR_THRESHOLD, colorDark, colorLight);
|
||||
ViewUtils.setBackground(indicator, getActionBarStackedBackground(activity, themeRes, themeColor, true));
|
||||
ViewSupport.setBackground(indicator, getActionBarStackedBackground(activity, themeRes, themeColor, true));
|
||||
if (isDarkTheme(themeRes)) {
|
||||
final int foregroundColor = getThemeForegroundColor(activity);
|
||||
indicator.setIconColor(foregroundColor);
|
||||
|
@ -842,14 +882,15 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
|
||||
public static boolean isDarkTheme(final Context context) {
|
||||
return isDarkTheme(getThemeResource(context));
|
||||
return isDarkTheme(getNoActionBarThemeResource(context));
|
||||
}
|
||||
|
||||
public static boolean isDarkTheme(final int themeRes) {
|
||||
switch (themeRes) {
|
||||
case R.style.Theme_Twidere_Dark:
|
||||
case R.style.Theme_Twidere_Dark_NoActionBar:
|
||||
case R.style.Theme_Twidere_Dark_Dialog:
|
||||
case R.style.Theme_Twidere_Dark_DialogWhenLarge:
|
||||
case R.style.Theme_Twidere_Dark_DialogWhenLarge_NoActionBar:
|
||||
case R.style.Theme_Twidere_Dark_Compose:
|
||||
return true;
|
||||
}
|
||||
|
@ -949,13 +990,29 @@ public class ThemeUtils implements Constants {
|
|||
drawable.setColorFilter(itemColor, Mode.SRC_ATOP);
|
||||
}
|
||||
actionBar.setHomeAsUpIndicator(drawable);
|
||||
setActionBarTitleTextColor(window, titleColor);
|
||||
setActionBarSubtitleTextColor(window, titleColor);
|
||||
// Ensure title view created
|
||||
if (actionBar instanceof WindowDecorActionBar) {
|
||||
actionBar.setTitle(actionBar.getTitle());
|
||||
actionBar.setSubtitle(actionBar.getSubtitle());
|
||||
setActionBarTitleTextColor(window, titleColor);
|
||||
setActionBarSubtitleTextColor(window, titleColor);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setToolBarColor(@NonNull Toolbar toolbar, int titleColor, int itemColor) {
|
||||
final Drawable drawable = toolbar.getNavigationIcon();
|
||||
if (drawable != null) {
|
||||
drawable.setColorFilter(itemColor, Mode.SRC_ATOP);
|
||||
}
|
||||
toolbar.setNavigationIcon(drawable);
|
||||
// Ensure title view created
|
||||
toolbar.setTitleTextColor(titleColor);
|
||||
toolbar.setSubtitleTextColor(titleColor);
|
||||
}
|
||||
|
||||
public static void setActionBarOverflowColor(Toolbar toolbar, int itemColor) {
|
||||
if (toolbar == null) return;
|
||||
final ActionMenuView actionMenuView = ViewUtils.findViewByType(toolbar, ActionMenuView.class);
|
||||
final ActionMenuView actionMenuView = ViewSupport.findViewByType(toolbar, ActionMenuView.class);
|
||||
if (actionMenuView == null) return;
|
||||
View overflowView = null;
|
||||
for (int i = 0, j = actionMenuView.getChildCount(); i < j; i++) {
|
||||
|
@ -1028,6 +1085,16 @@ public class ThemeUtils implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void setWindowOverlayViewOverlay(Activity activity, Drawable overlay) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return;
|
||||
final Window window = activity.getWindow();
|
||||
final View windowOverlay = window.findViewById(R.id.window_overlay);
|
||||
if (windowOverlay == null) {
|
||||
return;
|
||||
}
|
||||
ViewSupport.setBackground(windowOverlay, overlay);
|
||||
}
|
||||
|
||||
public static void setupDrawerBackground(Context context, View view) {
|
||||
if (!(context instanceof IThemedActivity)) return;
|
||||
final int themeRes = ((IThemedActivity) context).getCurrentThemeResourceId();
|
||||
|
@ -1038,7 +1105,7 @@ public class ThemeUtils implements Constants {
|
|||
if (d != null && isTransparentBackground(backgroundOption)) {
|
||||
d.setAlpha(alpha);
|
||||
}
|
||||
ViewUtils.setBackground(view, d);
|
||||
ViewSupport.setBackground(view, d);
|
||||
}
|
||||
|
||||
public static void wrapMenuIcon(@NonNull Menu menu, int itemColor, int subItemColor, int... excludeGroups) {
|
||||
|
@ -1140,4 +1207,13 @@ public class ThemeUtils implements Constants {
|
|||
Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
public static int getActionBarHeight(Context context) {
|
||||
final TypedValue tv = new TypedValue();
|
||||
final Resources.Theme theme = context.getTheme();
|
||||
final int attr = R.attr.actionBarSize;
|
||||
if (theme.resolveAttribute(attr, tv, true)) {
|
||||
return TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,17 +19,22 @@
|
|||
|
||||
package org.mariotaku.twidere.util;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.view.LayoutInflaterFactory;
|
||||
import android.support.v4.view.TintableBackgroundView;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.app.AppCompatDelegateTrojan;
|
||||
import android.support.v7.internal.app.WindowDecorActionBar;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.InflateException;
|
||||
import android.view.View;
|
||||
|
@ -118,7 +123,8 @@ public class ThemedLayoutInflaterFactory implements LayoutInflaterFactory {
|
|||
final int noTintColor, tintColor;
|
||||
final boolean isColorTint;
|
||||
// View context is not derived from ActionBar, apply color tint directly
|
||||
if (!isActionBarContext(view.getContext(), getActionBarContext((Activity) activity))) {
|
||||
final boolean isActionBarContext = isActionBarContext(view.getContext(), getActionBarContext((Activity) activity));
|
||||
if (!isActionBarContext) {
|
||||
tintColor = activity.getCurrentThemeColor();
|
||||
noTintColor = TwidereColorUtils.getContrastYIQ(tintColor, ThemeUtils.ACCENT_COLOR_THRESHOLD);
|
||||
isColorTint = true;
|
||||
|
@ -162,26 +168,31 @@ public class ThemedLayoutInflaterFactory implements LayoutInflaterFactory {
|
|||
}
|
||||
|
||||
private static boolean isActionBarContext(Context context, Context actionBarContext) {
|
||||
if (actionBarContext == null) return false;
|
||||
if (context == actionBarContext) return true;
|
||||
Context base = context;
|
||||
while (base instanceof ContextWrapper && (base = ((ContextWrapper) base).getBaseContext()) != null) {
|
||||
if (base == actionBarContext) return true;
|
||||
}
|
||||
return base == actionBarContext;
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Context getActionBarContext(Activity activity) {
|
||||
@Nullable
|
||||
private static Context getActionBarContext(@NonNull Activity activity) {
|
||||
if (activity instanceof AppCompatActivity) {
|
||||
final android.support.v7.app.ActionBar actionBar = ((AppCompatActivity) activity).getSupportActionBar();
|
||||
if (actionBar != null)
|
||||
final AppCompatDelegate delegate = ((AppCompatActivity) activity).getDelegate();
|
||||
final ActionBar actionBar = AppCompatDelegateTrojan.peekActionBar(delegate);
|
||||
if (actionBar instanceof WindowDecorActionBar)
|
||||
return actionBar.getThemedContext();
|
||||
} else if (activity instanceof AppCompatPreferenceActivity) {
|
||||
final android.support.v7.app.ActionBar actionBar = ((AppCompatPreferenceActivity) activity).getSupportActionBar();
|
||||
if (actionBar != null)
|
||||
final AppCompatDelegate delegate = ((AppCompatPreferenceActivity) activity).getDelegate();
|
||||
final ActionBar actionBar = AppCompatDelegateTrojan.peekActionBar(delegate);
|
||||
if (actionBar instanceof WindowDecorActionBar)
|
||||
return actionBar.getThemedContext();
|
||||
} else {
|
||||
final android.app.ActionBar actionBar = activity.getActionBar();
|
||||
if (actionBar != null) return actionBar.getThemedContext();
|
||||
}
|
||||
final ActionBar actionBar = activity.getActionBar();
|
||||
if (actionBar != null) return actionBar.getThemedContext();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ import android.content.pm.PackageInfo;
|
|||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.Resources.Theme;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
|
@ -140,8 +139,11 @@ import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.support.AccountsManagerFragment;
|
||||
import org.mariotaku.twidere.fragment.support.AddStatusFilterDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DestroyStatusDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DraftsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.FiltersFragment;
|
||||
import org.mariotaku.twidere.fragment.support.IncomingFriendshipsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.MessagesConversationFragment;
|
||||
import org.mariotaku.twidere.fragment.support.MutesUsersListFragment;
|
||||
|
@ -168,6 +170,7 @@ import org.mariotaku.twidere.fragment.support.UserListTimelineFragment;
|
|||
import org.mariotaku.twidere.fragment.support.UserListsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserMediaTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserMentionsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserProfileEditorFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UsersListFragment;
|
||||
import org.mariotaku.twidere.graphic.ActionIconDrawable;
|
||||
|
@ -393,6 +396,11 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_SEARCH, null, LINK_ID_SEARCH);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_MUTES_USERS, null, LINK_ID_MUTES_USERS);
|
||||
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_ACCOUNTS, null, LINK_ID_ACCOUNTS);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_DRAFTS, null, LINK_ID_DRAFTS);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_FILTERS, null, LINK_ID_FILTERS);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_PROFILE_EDITOR, null, LINK_ID_PROFILE_EDITOR);
|
||||
|
||||
HOME_TABS_URI_MATCHER.addURI(AUTHORITY_HOME, null, CustomTabUtils.TAB_CODE_HOME_TIMELINE);
|
||||
HOME_TABS_URI_MATCHER.addURI(AUTHORITY_MENTIONS, null, CustomTabUtils.TAB_CODE_MENTIONS_TIMELINE);
|
||||
HOME_TABS_URI_MATCHER.addURI(AUTHORITY_DIRECT_MESSAGES, null, CustomTabUtils.TAB_CODE_DIRECT_MESSAGES);
|
||||
|
@ -753,6 +761,25 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
args.putAll(extras);
|
||||
}
|
||||
switch (linkId) {
|
||||
case LINK_ID_ACCOUNTS: {
|
||||
fragment = new AccountsManagerFragment();
|
||||
break;
|
||||
}
|
||||
case LINK_ID_DRAFTS: {
|
||||
fragment = new DraftsFragment();
|
||||
break;
|
||||
}
|
||||
case LINK_ID_FILTERS: {
|
||||
fragment = new FiltersFragment();
|
||||
break;
|
||||
}
|
||||
case LINK_ID_PROFILE_EDITOR: {
|
||||
fragment = new UserProfileEditorFragment();
|
||||
if (!args.containsKey(EXTRA_ACCOUNT_ID) && uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID) == null) {
|
||||
return null;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LINK_ID_STATUS: {
|
||||
fragment = new StatusFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
|
@ -1026,7 +1053,7 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return fragment;
|
||||
}
|
||||
|
||||
public static Intent createStatusShareIntent(final Context context, final ParcelableStatus status) {
|
||||
public static Intent createStatusShareIntent(@NonNull final Context context, @NonNull final ParcelableStatus status) {
|
||||
final Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.setType("text/plain");
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, getStatusShareSubject(context, status));
|
||||
|
@ -1072,13 +1099,13 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return tag + "_" + TwidereArrayUtils.toString(accountIdsClone, '_', false);
|
||||
}
|
||||
|
||||
public static String getStatusShareText(final Context context, final ParcelableStatus status) {
|
||||
public static String getStatusShareText(@NonNull final Context context, @NonNull final ParcelableStatus status) {
|
||||
final Uri link = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.id);
|
||||
return context.getString(R.string.status_share_text_format_with_link,
|
||||
status.text_plain, link.toString());
|
||||
}
|
||||
|
||||
public static String getStatusShareSubject(final Context context, ParcelableStatus status) {
|
||||
public static String getStatusShareSubject(@NonNull final Context context, @NonNull final ParcelableStatus status) {
|
||||
final String timeString = formatToLongTimeString(context, status.timestamp);
|
||||
return context.getString(R.string.status_share_subject_format_with_time,
|
||||
status.user_name, status.user_screen_name, timeString);
|
||||
|
@ -3423,6 +3450,13 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return top - actionBarHeight;
|
||||
}
|
||||
|
||||
public static int getInsetsTopWithoutActionBarHeight(Context context, int top, int actionBarHeight) {
|
||||
if (actionBarHeight > top) {
|
||||
return top;
|
||||
}
|
||||
return top - actionBarHeight;
|
||||
}
|
||||
|
||||
public static void openUserProfile(final Context context, final ParcelableUser user,
|
||||
final Bundle activityOptions) {
|
||||
if (context == null || user == null) return;
|
||||
|
@ -4096,16 +4130,6 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return 0;
|
||||
}
|
||||
|
||||
public static int getActionBarHeight(Context context) {
|
||||
final TypedValue tv = new TypedValue();
|
||||
final Theme theme = context.getTheme();
|
||||
final int attr = context instanceof AppCompatActivity ? R.attr.actionBarSize : android.R.attr.actionBarSize;
|
||||
if (theme.resolveAttribute(attr, tv, true)) {
|
||||
return TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void makeListFragmentFitsSystemWindows(ListFragment fragment) {
|
||||
final FragmentActivity activity = fragment.getActivity();
|
||||
if (!(activity instanceof SystemWindowsInsetsCallback)) return;
|
||||
|
@ -4171,6 +4195,47 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
UtilsL.setSharedElementTransition(context, window, transitionRes);
|
||||
}
|
||||
|
||||
public static void openAccountsManager(Context context) {
|
||||
final Intent intent = new Intent();
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_ACCOUNTS);
|
||||
intent.setData(builder.build());
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openDrafts(Context context) {
|
||||
final Intent intent = new Intent();
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_DRAFTS);
|
||||
intent.setData(builder.build());
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openProfileEditor(Context context, long accountId) {
|
||||
final Intent intent = new Intent();
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_PROFILE_EDITOR);
|
||||
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, ParseUtils.parseString(accountId));
|
||||
intent.setData(builder.build());
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openFilters(Context context) {
|
||||
final Intent intent = new Intent();
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_FILTERS);
|
||||
intent.setData(builder.build());
|
||||
intent.setPackage(BuildConfig.APPLICATION_ID);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
static class UtilsL {
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.mariotaku.twidere.util.accessor;
|
||||
package org.mariotaku.twidere.util.support;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
|
@ -12,7 +12,7 @@ import android.os.Parcelable;
|
|||
/**
|
||||
* Created by mariotaku on 14/11/4.
|
||||
*/
|
||||
public class ActivityAccessor {
|
||||
public class ActivitySupport {
|
||||
|
||||
public static void setTaskDescription(Activity activity, TaskDescriptionCompat taskDescription) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util.support;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
|
||||
import org.mariotaku.twidere.util.support.graphics.OutlineCompat;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/27.
|
||||
*/
|
||||
public class DrawableSupport {
|
||||
|
||||
public static void getOutline(Drawable drawable, OutlineCompat outlineCompat) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
DrawableSupportLollipop.getOutline(drawable, outlineCompat);
|
||||
}
|
||||
|
||||
|
||||
private static class DrawableSupportLollipop {
|
||||
|
||||
public static void getOutline(Drawable drawable, OutlineCompat outlineCompat) {
|
||||
drawable.getOutline(OutlineCompat.OutlineL.getWrapped(outlineCompat));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -17,23 +17,22 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util;
|
||||
package org.mariotaku.twidere.util.support;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewOutlineProvider;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
public final class ViewUtils {
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
||||
|
||||
public final class ViewSupport {
|
||||
|
||||
public static boolean isInLayout(View view) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||
|
@ -137,7 +136,7 @@ public final class ViewUtils {
|
|||
|
||||
public static void setOutlineProvider(View view, ViewOutlineProviderCompat outlineProvider) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
view.setOutlineProvider(new ViewOutlineProviderL(outlineProvider));
|
||||
view.setOutlineProvider(new ViewOutlineProviderCompat.ViewOutlineProviderL(outlineProvider));
|
||||
}
|
||||
|
||||
|
||||
|
@ -168,144 +167,4 @@ public final class ViewUtils {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Interface by which a View builds its {@link ViewUtils.OutlineCompat}, used for shadow casting and clipping.
|
||||
*/
|
||||
public static abstract class ViewOutlineProviderCompat {
|
||||
/**
|
||||
* Called to get the provider to populate the Outline.
|
||||
* <p/>
|
||||
* This method will be called by a View when its owned Drawables are invalidated, when the
|
||||
* View's size changes, or if {@link View#invalidateOutline()} is called
|
||||
* explicitly.
|
||||
* <p/>
|
||||
* The input outline is empty and has an alpha of <code>1.0f</code>.
|
||||
*
|
||||
* @param view The view building the outline.
|
||||
* @param outline The empty outline to be populated.
|
||||
*/
|
||||
public abstract void getOutline(View view, OutlineCompat outline);
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private static class ViewOutlineProviderL extends ViewOutlineProvider {
|
||||
|
||||
private final ViewOutlineProviderCompat providerCompat;
|
||||
|
||||
ViewOutlineProviderL(ViewOutlineProviderCompat providerCompat) {
|
||||
this.providerCompat = providerCompat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
providerCompat.getOutline(view, new OutlineL(outline));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static abstract class OutlineCompat {
|
||||
|
||||
public abstract float getAlpha();
|
||||
|
||||
public abstract boolean isEmpty();
|
||||
|
||||
public abstract void set(Outline src);
|
||||
|
||||
public abstract void setAlpha(float alpha);
|
||||
|
||||
public abstract void setConvexPath(Path convexPath);
|
||||
|
||||
public abstract void setOval(int left, int top, int right, int bottom);
|
||||
|
||||
public abstract void setOval(Rect rect);
|
||||
|
||||
public abstract void setEmpty();
|
||||
|
||||
public abstract boolean canClip();
|
||||
|
||||
public abstract void setRect(int left, int top, int right, int bottom);
|
||||
|
||||
public abstract void setRect(Rect rect);
|
||||
|
||||
public abstract void setRoundRect(int left, int top, int right, int bottom, float radius);
|
||||
|
||||
public abstract void setRoundRect(Rect rect, float radius);
|
||||
}
|
||||
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public static class OutlineL extends OutlineCompat {
|
||||
|
||||
private final Outline outline;
|
||||
|
||||
@Override
|
||||
public void setEmpty() {
|
||||
outline.setEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canClip() {
|
||||
return outline.canClip();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRect(int left, int top, int right, int bottom) {
|
||||
outline.setRect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOval(int left, int top, int right, int bottom) {
|
||||
outline.setOval(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConvexPath(Path convexPath) {
|
||||
outline.setConvexPath(convexPath);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRect(Rect rect) {
|
||||
outline.setRect(rect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOval(Rect rect) {
|
||||
outline.setOval(rect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getAlpha() {
|
||||
return outline.getAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(Outline src) {
|
||||
outline.set(src);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRoundRect(int left, int top, int right, int bottom, float radius) {
|
||||
outline.setRoundRect(left, top, right, bottom, radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRoundRect(Rect rect, float radius) {
|
||||
outline.setRoundRect(rect, radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return outline.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAlpha(float alpha) {
|
||||
outline.setAlpha(alpha);
|
||||
}
|
||||
|
||||
public OutlineL(Outline outline) {
|
||||
this.outline = outline;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package org.mariotaku.twidere.util.accessor;
|
||||
package org.mariotaku.twidere.util.support;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.os.Build;
|
|
@ -0,0 +1,138 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util.support.graphics;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/27.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public abstract class OutlineCompat {
|
||||
|
||||
public abstract float getAlpha();
|
||||
|
||||
public abstract boolean isEmpty();
|
||||
|
||||
public abstract void set(Outline src);
|
||||
|
||||
public abstract void setAlpha(float alpha);
|
||||
|
||||
public abstract void setConvexPath(Path convexPath);
|
||||
|
||||
public abstract void setOval(int left, int top, int right, int bottom);
|
||||
|
||||
public abstract void setOval(Rect rect);
|
||||
|
||||
public abstract void setEmpty();
|
||||
|
||||
public abstract boolean canClip();
|
||||
|
||||
public abstract void setRect(int left, int top, int right, int bottom);
|
||||
|
||||
public abstract void setRect(Rect rect);
|
||||
|
||||
public abstract void setRoundRect(int left, int top, int right, int bottom, float radius);
|
||||
|
||||
public abstract void setRoundRect(Rect rect, float radius);
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public static class OutlineL extends OutlineCompat {
|
||||
|
||||
public static Outline getWrapped(OutlineCompat outlineL) {
|
||||
return outlineL instanceof OutlineL ? ((OutlineL) outlineL).outline : null;
|
||||
}
|
||||
|
||||
private final Outline outline;
|
||||
|
||||
@Override
|
||||
public void setEmpty() {
|
||||
outline.setEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canClip() {
|
||||
return outline.canClip();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRect(int left, int top, int right, int bottom) {
|
||||
outline.setRect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOval(int left, int top, int right, int bottom) {
|
||||
outline.setOval(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConvexPath(Path convexPath) {
|
||||
outline.setConvexPath(convexPath);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRect(Rect rect) {
|
||||
outline.setRect(rect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOval(Rect rect) {
|
||||
outline.setOval(rect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getAlpha() {
|
||||
return outline.getAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(Outline src) {
|
||||
outline.set(src);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRoundRect(int left, int top, int right, int bottom, float radius) {
|
||||
outline.setRoundRect(left, top, right, bottom, radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRoundRect(Rect rect, float radius) {
|
||||
outline.setRoundRect(rect, radius);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return outline.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAlpha(float alpha) {
|
||||
outline.setAlpha(alpha);
|
||||
}
|
||||
|
||||
public OutlineL(Outline outline) {
|
||||
this.outline = outline;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util.support.view;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
import android.view.ViewOutlineProvider;
|
||||
|
||||
import org.mariotaku.twidere.util.support.graphics.OutlineCompat;
|
||||
import org.mariotaku.twidere.util.support.DrawableSupport;
|
||||
|
||||
/**
|
||||
* Interface by which a View builds its {@link org.mariotaku.twidere.util.support.graphics.OutlineCompat}, used for shadow casting and clipping.
|
||||
*/
|
||||
public abstract class ViewOutlineProviderCompat {
|
||||
/**
|
||||
* Called to get the provider to populate the Outline.
|
||||
* <p/>
|
||||
* This method will be called by a View when its owned Drawables are invalidated, when the
|
||||
* View's size changes, or if {@link android.view.View#invalidateOutline()} is called
|
||||
* explicitly.
|
||||
* <p/>
|
||||
* The input outline is empty and has an alpha of <code>1.0f</code>.
|
||||
*
|
||||
* @param view The view building the outline.
|
||||
* @param outline The empty outline to be populated.
|
||||
*/
|
||||
public abstract void getOutline(View view, OutlineCompat outline);
|
||||
|
||||
/**
|
||||
* Maintains the outline of the View to match its rectangular bounds,
|
||||
* at <code>1.0f</code> alpha.
|
||||
* <p/>
|
||||
* This can be used to enable Views that are opaque but lacking a background cast a shadow.
|
||||
*/
|
||||
public static final ViewOutlineProviderCompat BOUNDS = new ViewOutlineProviderCompat() {
|
||||
@Override
|
||||
public void getOutline(View view, OutlineCompat outline) {
|
||||
outline.setRect(0, 0, view.getWidth(), view.getHeight());
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Default outline provider for Views, which queries the Outline from the View's background,
|
||||
* or generates a 0 alpha, rectangular Outline the size of the View if a background
|
||||
* isn't present.
|
||||
*
|
||||
* @see android.graphics.drawable.Drawable#getOutline(android.graphics.Outline)
|
||||
*/
|
||||
public static final ViewOutlineProviderCompat BACKGROUND = new ViewOutlineProviderCompat() {
|
||||
@Override
|
||||
public void getOutline(View view, OutlineCompat outline) {
|
||||
Drawable background = view.getBackground();
|
||||
if (background != null) {
|
||||
DrawableSupport.getOutline(background, outline);
|
||||
} else {
|
||||
outline.setRect(0, 0, view.getWidth(), view.getHeight());
|
||||
outline.setAlpha(0.0f);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
public static class ViewOutlineProviderL extends ViewOutlineProvider {
|
||||
|
||||
private final ViewOutlineProviderCompat providerCompat;
|
||||
|
||||
public ViewOutlineProviderL(ViewOutlineProviderCompat providerCompat) {
|
||||
this.providerCompat = providerCompat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
providerCompat.getOutline(view, new OutlineCompat.OutlineL(outline));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -39,9 +39,9 @@ import android.widget.ProgressBar;
|
|||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils.OutlineCompat;
|
||||
import org.mariotaku.twidere.util.ViewUtils.ViewOutlineProviderCompat;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.util.support.graphics.OutlineCompat;
|
||||
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
||||
import org.mariotaku.twidere.view.iface.IHomeActionButton;
|
||||
|
||||
import me.uucky.colorpicker.internal.EffectViewHelper;
|
||||
|
@ -92,14 +92,14 @@ public class HomeActionButton extends FrameLayout implements IHomeActionButton {
|
|||
}
|
||||
mIconView = (ImageView) findViewById(android.R.id.icon);
|
||||
mProgressBar = (ProgressBar) findViewById(android.R.id.progress);
|
||||
ViewUtils.setOutlineProvider(this, new HomeActionButtonOutlineProvider());
|
||||
ViewSupport.setOutlineProvider(this, new HomeActionButtonOutlineProvider());
|
||||
setClipToOutline(true);
|
||||
setButtonColor(Color.WHITE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setButtonColor(int color) {
|
||||
ViewUtils.setBackground(this, new ColorDrawable(color));
|
||||
ViewSupport.setBackground(this, new ColorDrawable(color));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -41,7 +41,7 @@ import android.widget.ProgressBar;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.iface.IHomeActionButton;
|
||||
|
||||
public class HomeActionButtonCompat extends FrameLayout implements IHomeActionButton {
|
||||
|
@ -66,7 +66,7 @@ public class HomeActionButtonCompat extends FrameLayout implements IHomeActionBu
|
|||
final Resources resources = getResources();
|
||||
final int radius = resources.getDimensionPixelSize(R.dimen.element_spacing_small);
|
||||
mBackground = new FloatingActionDrawable(this, radius);
|
||||
ViewUtils.setBackground(this, mBackground);
|
||||
ViewSupport.setBackground(this, mBackground);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -33,7 +33,7 @@ import android.view.View;
|
|||
import android.view.ViewConfiguration;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.view.iface.PagerIndicator;
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ public class LinePageIndicator extends View implements PagerIndicator {
|
|||
|
||||
final Drawable background = a.getDrawable(R.styleable.LinePageIndicator_android_background);
|
||||
if (background != null) {
|
||||
ViewUtils.setBackground(this, background);
|
||||
ViewSupport.setBackground(this, background);
|
||||
}
|
||||
|
||||
a.recycle();
|
||||
|
|
|
@ -7,9 +7,12 @@ import android.support.annotation.NonNull;
|
|||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
||||
public class ProfileBannerSpace extends View {
|
||||
|
||||
private final Rect mSystemWindowsInsets;
|
||||
private final int mActionBarHeight;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
@ -32,12 +35,7 @@ public class ProfileBannerSpace extends View {
|
|||
public ProfileBannerSpace(final Context context, final AttributeSet attrs, final int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
mSystemWindowsInsets = new Rect();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean fitSystemWindows(@NonNull Rect insets) {
|
||||
mSystemWindowsInsets.set(insets);
|
||||
return super.fitSystemWindows(insets);
|
||||
mActionBarHeight = ThemeUtils.getActionBarHeight(context);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -49,9 +47,17 @@ public class ProfileBannerSpace extends View {
|
|||
public void draw(@NonNull final Canvas canvas) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean fitSystemWindows(@NonNull Rect insets) {
|
||||
mSystemWindowsInsets.set(insets);
|
||||
return super.fitSystemWindows(insets);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
|
||||
final int width = MeasureSpec.getSize(widthMeasureSpec), height = width / 2 - mSystemWindowsInsets.top;
|
||||
final int insetsTop = mSystemWindowsInsets.top;
|
||||
final int top = insetsTop < mActionBarHeight ? insetsTop + mActionBarHeight : insetsTop;
|
||||
final int width = MeasureSpec.getSize(widthMeasureSpec), height = width / 2 - top;
|
||||
setMeasuredDimension(width, height);
|
||||
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
|
||||
}
|
||||
|
|
|
@ -49,9 +49,9 @@ import android.view.View;
|
|||
import android.widget.ImageView;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.ViewUtils.OutlineCompat;
|
||||
import org.mariotaku.twidere.util.ViewUtils.ViewOutlineProviderCompat;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
import org.mariotaku.twidere.util.support.graphics.OutlineCompat;
|
||||
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
@ -426,8 +426,8 @@ public class ShapedImageView extends ImageView {
|
|||
}
|
||||
|
||||
private void initOutlineProvider() {
|
||||
ViewUtils.setClipToOutline(this, true);
|
||||
ViewUtils.setOutlineProvider(this, new CircularOutlineProvider());
|
||||
ViewSupport.setClipToOutline(this, true);
|
||||
ViewSupport.setOutlineProvider(this, new CircularOutlineProvider());
|
||||
}
|
||||
|
||||
private void setBorderColorsInternal(int alpha, int... colors) {
|
||||
|
|
|
@ -31,11 +31,12 @@ import android.util.AttributeSet;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.iface.TintedStatusLayout;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/26.
|
||||
*/
|
||||
public class TintedStatusFrameLayout extends ExtendedFrameLayout {
|
||||
public class TintedStatusFrameLayout extends ExtendedFrameLayout implements TintedStatusLayout {
|
||||
|
||||
private final Paint mBlackPaint, mShadowPaint, mColorPaint;
|
||||
private boolean mSetPadding;
|
||||
|
@ -44,6 +45,7 @@ public class TintedStatusFrameLayout extends ExtendedFrameLayout {
|
|||
private float mFactor;
|
||||
private int mColorAlpha, mShadowAlpha;
|
||||
private boolean mDrawShadow, mDrawColor;
|
||||
private Rect mSystemWindowsInsets;
|
||||
|
||||
public TintedStatusFrameLayout(Context context) {
|
||||
this(context, null);
|
||||
|
@ -62,47 +64,64 @@ public class TintedStatusFrameLayout extends ExtendedFrameLayout {
|
|||
mBlackPaint.setColor(Color.BLACK);
|
||||
mShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
mColorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
mSystemWindowsInsets = new Rect();
|
||||
setWillNotDraw(false);
|
||||
setFactor(1);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setColor(int color) {
|
||||
setColor(color, Color.alpha(color));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(int color, int alpha) {
|
||||
mColorPaint.setColor(color);
|
||||
mColorAlpha = alpha;
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDrawColor(boolean color) {
|
||||
mDrawColor = color;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDrawShadow(boolean shadow) {
|
||||
mDrawShadow = shadow;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFactor(float f) {
|
||||
mFactor = f;
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShadowColor(int color) {
|
||||
mShadowPaint.setColor(color);
|
||||
mShadowAlpha = Color.alpha(color);
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSetPaddingEnabled(boolean enabled) {
|
||||
mSetPadding = enabled;
|
||||
}
|
||||
|
||||
public void setStatusBarHeight(int height) {
|
||||
mStatusBarHeight = height;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSystemWindowsInsets(Rect insets) {
|
||||
insets.set(mSystemWindowsInsets);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(@NonNull Canvas canvas) {
|
||||
super.dispatchDraw(canvas);
|
||||
|
@ -120,6 +139,7 @@ public class TintedStatusFrameLayout extends ExtendedFrameLayout {
|
|||
if (mSetPadding) {
|
||||
setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
mSystemWindowsInsets.set(insets);
|
||||
return super.fitSystemWindows(insets);
|
||||
}
|
||||
|
||||
|
@ -129,8 +149,4 @@ public class TintedStatusFrameLayout extends ExtendedFrameLayout {
|
|||
mColorPaint.setAlpha(Math.round(0xFF * MathUtils.clamp(f, 0, 1)));
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setSetPaddingEnabled(boolean enabled) {
|
||||
mSetPadding = enabled;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.iface.TintedStatusLayout;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/26.
|
||||
*/
|
||||
public class TintedStatusRelativeLayout extends ExtendedRelativeLayout implements TintedStatusLayout {
|
||||
|
||||
private final Paint mBlackPaint, mShadowPaint, mColorPaint;
|
||||
private boolean mSetPadding;
|
||||
|
||||
private int mStatusBarHeight;
|
||||
private float mFactor;
|
||||
private int mColorAlpha, mShadowAlpha;
|
||||
private boolean mDrawShadow, mDrawColor;
|
||||
private Rect mSystemWindowsInsets;
|
||||
|
||||
public TintedStatusRelativeLayout(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public TintedStatusRelativeLayout(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public TintedStatusRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TintedStatusLayout);
|
||||
setSetPaddingEnabled(a.getBoolean(R.styleable.TintedStatusLayout_setPadding, false));
|
||||
a.recycle();
|
||||
mBlackPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
mBlackPaint.setColor(Color.BLACK);
|
||||
mShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
mColorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
mSystemWindowsInsets = new Rect();
|
||||
setWillNotDraw(false);
|
||||
setFactor(1);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setColor(int color) {
|
||||
setColor(color, Color.alpha(color));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(int color, int alpha) {
|
||||
mColorPaint.setColor(color);
|
||||
mColorAlpha = alpha;
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDrawColor(boolean color) {
|
||||
mDrawColor = color;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDrawShadow(boolean shadow) {
|
||||
mDrawShadow = shadow;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFactor(float f) {
|
||||
mFactor = f;
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShadowColor(int color) {
|
||||
mShadowPaint.setColor(color);
|
||||
mShadowAlpha = Color.alpha(color);
|
||||
updateAlpha();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSetPaddingEnabled(boolean enabled) {
|
||||
mSetPadding = enabled;
|
||||
}
|
||||
|
||||
public void setStatusBarHeight(int height) {
|
||||
mStatusBarHeight = height;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSystemWindowsInsets(Rect insets) {
|
||||
insets.set(mSystemWindowsInsets);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(@NonNull Canvas canvas) {
|
||||
super.dispatchDraw(canvas);
|
||||
if (mDrawShadow) {
|
||||
canvas.drawRect(0, 0, canvas.getWidth(), mStatusBarHeight, mShadowPaint);
|
||||
} else if (mDrawColor) {
|
||||
canvas.drawRect(0, 0, canvas.getWidth(), mStatusBarHeight, mBlackPaint);
|
||||
}
|
||||
canvas.drawRect(0, 0, canvas.getWidth(), mStatusBarHeight, mDrawColor ? mColorPaint : mBlackPaint);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean fitSystemWindows(@NonNull Rect insets) {
|
||||
setStatusBarHeight(Utils.getInsetsTopWithoutActionBarHeight(getContext(), insets.top));
|
||||
if (mSetPadding) {
|
||||
setPadding(insets.left, insets.top, insets.right, insets.bottom);
|
||||
}
|
||||
mSystemWindowsInsets.set(insets);
|
||||
return super.fitSystemWindows(insets);
|
||||
}
|
||||
|
||||
private void updateAlpha() {
|
||||
final float f = mFactor;
|
||||
mShadowPaint.setAlpha(Math.round(mShadowAlpha * MathUtils.clamp(1 - f, 0, 1)));
|
||||
mColorPaint.setAlpha(Math.round(0xFF * MathUtils.clamp(f, 0, 1)));
|
||||
invalidate();
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ import android.content.Context;
|
|||
import android.util.AttributeSet;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import org.mariotaku.twidere.util.ViewUtils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/1/1.
|
||||
|
@ -47,7 +47,7 @@ public class TwitterCardContainer extends FrameLayout {
|
|||
public void setCardSize(int width, int height) {
|
||||
mCardWidth = width;
|
||||
mCardHeight = height;
|
||||
if (!ViewUtils.isInLayout(this)) {
|
||||
if (!ViewSupport.isInLayout(this)) {
|
||||
requestLayout();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.view.iface;
|
||||
|
||||
import android.graphics.Rect;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/4/27.
|
||||
*/
|
||||
public interface TintedStatusLayout extends IExtendedView {
|
||||
void setColor(int color);
|
||||
|
||||
void setColor(int color, int alpha);
|
||||
|
||||
void setDrawColor(boolean color);
|
||||
|
||||
void setDrawShadow(boolean shadow);
|
||||
|
||||
void setFactor(float f);
|
||||
|
||||
void setShadowColor(int color);
|
||||
|
||||
void setSetPaddingEnabled(boolean enabled);
|
||||
|
||||
void getSystemWindowsInsets(Rect insets);
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
|
@ -18,8 +17,30 @@
|
|||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.TintedStatusFrameLayout
|
||||
<org.mariotaku.twidere.view.TintedStatusFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/main_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.mariotaku.twidere.view.TwidereToolbar
|
||||
android:id="@+id/tool_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize" />
|
||||
|
||||
<View
|
||||
android:background="?android:windowContentOverlay"
|
||||
android:id="@+id/window_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</org.mariotaku.twidere.view.TintedStatusFrameLayout>
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/tool_bar"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
|
@ -17,15 +16,12 @@
|
|||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<org.mariotaku.twidere.view.TintedStatusFrameLayout
|
||||
android:id="@+id/main_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:animateLayoutChanges="true"
|
||||
app:setPadding="true">
|
||||
android:animateLayoutChanges="true">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/list_container"
|
||||
|
@ -36,7 +32,7 @@
|
|||
android:id="@android:id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:visibility="gone"/>
|
||||
tools:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@android:id/empty"
|
||||
|
@ -50,7 +46,7 @@
|
|||
android:id="@+id/empty_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:color="?android:textColorSecondary"/>
|
||||
android:color="?android:textColorSecondary" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/empty_text"
|
||||
|
@ -59,7 +55,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_marginTop="@dimen/element_spacing_normal"
|
||||
android:gravity="center"
|
||||
android:textAppearance="?android:textAppearanceMedium"/>
|
||||
android:textAppearance="?android:textAppearanceMedium" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -72,6 +68,7 @@
|
|||
android:id="@android:id/progress"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"/>
|
||||
android:layout_gravity="center" />
|
||||
</FrameLayout>
|
||||
</org.mariotaku.twidere.view.TintedStatusFrameLayout>
|
||||
|
||||
</FrameLayout>
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
|
@ -30,14 +29,14 @@
|
|||
<org.mariotaku.twidere.view.ProfileBannerSpace
|
||||
android:id="@+id/profile_banner_space"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<View
|
||||
android:id="@+id/profile_name_background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_alignTop="@+id/profile_name_container"
|
||||
android:layout_alignBottom="@+id/profile_name_container"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<org.mariotaku.twidere.view.ColorLabelRelativeLayout
|
||||
android:id="@+id/profile_name_container"
|
||||
|
@ -65,7 +64,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/follow_progress"
|
||||
|
@ -73,7 +72,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -94,7 +93,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="Name"/>
|
||||
tools:text="Name" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screen_name"
|
||||
|
@ -103,7 +102,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="\@screenname"/>
|
||||
tools:text="\@screenname" />
|
||||
</LinearLayout>
|
||||
|
||||
</org.mariotaku.twidere.view.ColorLabelRelativeLayout>
|
||||
|
@ -112,7 +111,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/element_spacing_xsmall"
|
||||
android:layout_above="@+id/profile_name_container"
|
||||
android:background="@drawable/shadow_top"/>
|
||||
android:background="@drawable/shadow_top" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/profile_details_container"
|
||||
|
@ -146,7 +145,7 @@
|
|||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textStyle="bold"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/description"
|
||||
|
@ -156,7 +155,7 @@
|
|||
android:paddingRight="@dimen/element_spacing_small"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="Line 1\nLine 2\nLine 3"/>
|
||||
tools:text="Line 1\nLine 2\nLine 3" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -173,7 +172,7 @@
|
|||
android:layout_width="@dimen/element_size_small"
|
||||
android:layout_height="@dimen/element_size_small"
|
||||
android:color="?android:textColorPrimary"
|
||||
android:src="@drawable/ic_action_location"/>
|
||||
android:src="@drawable/ic_action_location" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/location"
|
||||
|
@ -184,7 +183,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="Zhengzhou China"/>
|
||||
tools:text="Zhengzhou China" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -201,7 +200,7 @@
|
|||
android:layout_width="@dimen/element_size_small"
|
||||
android:layout_height="@dimen/element_size_small"
|
||||
android:color="?android:textColorPrimary"
|
||||
android:src="@drawable/ic_action_link"/>
|
||||
android:src="@drawable/ic_action_link" />
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/url"
|
||||
|
@ -213,7 +212,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="mariotaku.org"/>
|
||||
tools:text="mariotaku.org" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -230,7 +229,7 @@
|
|||
android:layout_width="@dimen/element_size_small"
|
||||
android:layout_height="@dimen/element_size_small"
|
||||
android:color="?android:textColorPrimary"
|
||||
android:src="@drawable/ic_action_portal_cake"/>
|
||||
android:src="@drawable/ic_action_portal_cake" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/created_at"
|
||||
|
@ -241,13 +240,13 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="July 17, 2009 18:35 (20 tweets per day)"/>
|
||||
tools:text="July 17, 2009 18:35 (20 tweets per day)" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.2dp"
|
||||
android:background="?android:dividerVertical"/>
|
||||
android:background="?android:dividerVertical" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -276,7 +275,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="255"/>
|
||||
tools:text="255" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -284,7 +283,7 @@
|
|||
android:singleLine="true"
|
||||
android:text="@string/followers"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorSecondary"/>
|
||||
android:textColor="?android:textColorSecondary" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -305,7 +304,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="255"/>
|
||||
tools:text="255" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -313,7 +312,7 @@
|
|||
android:singleLine="true"
|
||||
android:text="@string/following"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorSecondary"/>
|
||||
android:textColor="?android:textColorSecondary" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -334,7 +333,7 @@
|
|||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
tools:text="255"/>
|
||||
tools:text="255" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -342,12 +341,12 @@
|
|||
android:singleLine="true"
|
||||
android:text="@string/listed"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorSecondary"/>
|
||||
android:textColor="?android:textColorSecondary" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/layout_content_fragment_common"/>
|
||||
<include layout="@layout/layout_content_fragment_common" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -358,7 +357,7 @@
|
|||
android:layout_height="@dimen/icon_size_user_profile"
|
||||
android:layout_alignBottom="@+id/profile_name_container"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"/>
|
||||
android:contentDescription="@string/profile_image" />
|
||||
|
||||
<org.mariotaku.twidere.view.BoundsImageView
|
||||
android:id="@+id/profile_type"
|
||||
|
@ -370,7 +369,7 @@
|
|||
android:layout_marginBottom="@dimen/element_spacing_minus_msmall"
|
||||
android:layout_marginRight="@dimen/element_spacing_minus_msmall"
|
||||
android:scaleType="fitCenter"
|
||||
tools:visibility="gone"/>
|
||||
tools:visibility="gone" />
|
||||
|
||||
<org.mariotaku.twidere.view.AssetFontTextView
|
||||
android:id="@+id/uucky_footer"
|
||||
|
@ -385,6 +384,6 @@
|
|||
android:textStyle="italic"
|
||||
android:typeface="serif"
|
||||
android:visibility="gone"
|
||||
app:fontPath="fonts/LibreBaskerville-Italic.ttf"/>
|
||||
app:fontPath="fonts/LibreBaskerville-Italic.ttf" />
|
||||
|
||||
</RelativeLayout>
|
|
@ -4,7 +4,6 @@
|
|||
<dimen name="pane_spacing_left">270dp</dimen>
|
||||
<dimen name="pane_spacing_right">270dp</dimen>
|
||||
<dimen name="icon_size_wizard_large">480dp</dimen>
|
||||
<dimen name="drawer_width_home">480dp</dimen>
|
||||
<dimen name="accounts_drawer_name_size">18sp</dimen>
|
||||
<dimen name="accounts_drawer_screen_name_size">16sp</dimen>
|
||||
<dimen name="accounts_drawer_default_indicator_size">14sp</dimen>
|
||||
|
|
|
@ -7,31 +7,44 @@
|
|||
<item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Blank" parent="Theme.Compat.Base.NoActionBar">
|
||||
<style name="Theme.Twidere.Dark.NoActionBar" parent="Theme.Compat.Base.NoActionBar">
|
||||
|
||||
<!-- Window attributes -->
|
||||
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
<item name="android:windowBackground">@color/background_color_window_dark</item>
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
|
||||
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_light</item>
|
||||
<item name="menuIconColorActionBar">?menuIconColor</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Blank.Dialog" parent="Theme.Compat.Base.Dialog" />
|
||||
<style name="Theme.Twidere.Light.NoActionBar" parent="Theme.Compat.Base.Light.NoActionBar">
|
||||
|
||||
<!-- Window attributes -->
|
||||
<item name="android:windowBackground">@color/background_color_window_light</item>
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">#f8f8f8</item>
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_dark</item>
|
||||
<item name="menuIconColorDisabled">@color/action_icon_dark_disabled</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Dark" parent="Theme.Compat.Base">
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
<!-- Colors -->
|
||||
<!--<item name="android:colorBackgroundCacheHint">@color/bg_color_dark</item>-->
|
||||
|
||||
<!-- Window attributes -->
|
||||
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
|
||||
<item name="android:windowBackground">@color/background_color_window_dark</item>
|
||||
|
||||
<!-- ActionBar styles -->
|
||||
<item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar.Solid
|
||||
</item>
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
|
||||
|
@ -46,21 +59,9 @@
|
|||
|
||||
<style name="Theme.Twidere.Light" parent="Theme.Compat.Base.Light">
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
|
||||
<!-- Colors -->
|
||||
<!--<item name="android:colorBackgroundCacheHint">@color/bg_color_light</item>-->
|
||||
|
||||
<!-- Window attributes -->
|
||||
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
|
||||
<item name="android:windowBackground">@color/background_color_window_light</item>
|
||||
|
||||
<!-- ActionBar styles -->
|
||||
<!--<item name="android:actionBarStyle">@style/Widget.Twidere.ActionBar.Light.DarkActionBar</item>-->
|
||||
<!--<item name="android:actionBarWidgetTheme">@style/Theme.Twidere.Dark</item>-->
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
|
||||
|
@ -69,21 +70,14 @@
|
|||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_dark</item>
|
||||
<item name="menuIconColorDisabled">@color/action_icon_dark_disabled</item>
|
||||
<item name="menuIconColorActionBar">@color/action_icon_light</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Dark.DialogWhenLarge" parent="Theme.Compat.Base.DialogWhenLarge">
|
||||
<style name="Theme.Twidere.Dark.DialogWhenLarge.NoActionBar" parent="Theme.Compat.Base.DialogWhenLarge">
|
||||
|
||||
<item name="windowNoTitle">true</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="android:windowBackground">@color/background_color_window_dark</item>
|
||||
|
||||
<!-- ActionBar styles -->
|
||||
<item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar.Solid
|
||||
</item>
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
<item name="windowActionModeOverlay">false</item>
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
|
||||
|
@ -96,23 +90,24 @@
|
|||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Light.DialogWhenLarge" parent="Theme.Compat.Base.Light.DialogWhenLarge">
|
||||
<style name="Theme.Twidere.Light.DialogWhenLarge.NoActionBar" parent="Theme.Compat.Base.Light.DialogWhenLarge">
|
||||
|
||||
<item name="windowNoTitle">true</item>
|
||||
<item name="windowActionBar">false</item>
|
||||
|
||||
<item name="windowActionModeOverlay">false</item>
|
||||
<!-- Card UI styles -->
|
||||
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
|
||||
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
|
||||
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
|
||||
<item name="cardItemBackgroundColor">#f8f8f8</item>
|
||||
|
||||
<!-- Twidere specific styles -->
|
||||
<item name="menuIconColor">@color/action_icon_dark</item>
|
||||
<item name="menuIconColorDisabled">@color/action_icon_dark_disabled</item>
|
||||
<item name="menuIconColorActionBar">@color/action_icon_light</item>
|
||||
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Dark.Dialog" parent="Theme.Base.Dialog">
|
||||
<style name="Theme.Twidere.Dark.Dialog" parent="Theme.Compat.Base.Dialog">
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
|
@ -129,7 +124,7 @@
|
|||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Light.Dialog" parent="Theme.Base.Light.Dialog">
|
||||
<style name="Theme.Twidere.Light.Dialog" parent="Theme.Compat.Base.Light.Dialog">
|
||||
|
||||
<!-- Custom view styles -->
|
||||
|
||||
|
@ -243,12 +238,12 @@
|
|||
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Drawer.Dark" parent="Theme.Twidere.Dark">
|
||||
<style name="Theme.Twidere.Drawer.Dark" parent="Theme.Twidere.Dark.NoActionBar">
|
||||
<!-- Window attributes -->
|
||||
<item name="android:windowBackground">@color/bg_color_drawer_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Dark.NoDisplay">
|
||||
<style name="Theme.Twidere.Dark.NoDisplay" parent="Theme.Twidere.Dark.NoActionBar">
|
||||
<item name="android:windowBackground">@null</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
|
@ -257,7 +252,7 @@
|
|||
<item name="android:windowNoDisplay">true</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Light.NoDisplay">
|
||||
<style name="Theme.Twidere.Light.NoDisplay" parent="Theme.Twidere.Light.NoActionBar">
|
||||
<item name="android:windowBackground">@null</item>
|
||||
<item name="android:windowContentOverlay">@null</item>
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
|
@ -272,7 +267,7 @@
|
|||
<item name="android:windowBackground">@color/nyan_background</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Twidere.Wizard" parent="Theme.Twidere.Light">
|
||||
<style name="Theme.Twidere.Wizard" parent="Theme.Twidere.Light.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="android:windowBackground">@color/background_color_window_settings_wizard</item>
|
||||
<item name="android:colorActivatedHighlight">@color/branding_color</item>
|
||||
|
|
Loading…
Reference in New Issue